PK,Fm$!fityk-v1.2.1/.buildinfo# Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. config: tags: PK,F{))fityk-v1.2.1/objects.inv# Sphinx inventory version 2 # Project: Fityk # Version: 1.2.1 # The remainder of this file is compressed using zlib. xڭXMo8WHA [74lGG2j%G_!%fȋ%P|C+I O=G@Qz8Iǎsl; TE0HWG@})z<$>mrY,*g[k̞t%hdKzH>r?\{q)>D D.2UieFvȎcs]T1[4-`(-*U+~DR׌ p"aG&$κA+]P` 4/<0ZGWD}o;Hg F|dKDTfc/ q@ jr{]k =BTM;P\pK83u7_uF{JN?'mA٥q7:[| *\NFZn x's^K#^WQ:~d;L\';w%O҅%=CxaRx,hnPFI^(;7xZ%~494;?;FO5g}<%U\=FZP&^${ yn= z#t*S\ eXbQə O? D[K v)`Lűx.&q`HPb]̛p,IWFAo#+;m3*'ܧ;rfv_sF/>_2d~v8S>@iO% @ʳݏ sےYs~}:=rpi@Pr7+:[9JH'%gwXczQ!yX]L2KWr5uBzo0AŻX^U>}lo֍ ,3PK,F$--fityk-v1.2.1/index.html Contents — Fityk 1.2.1 manual
PK,F'to,,fityk-v1.2.1/fityk-manual.html Fityk 1.2.1 manual

Fityk 1.2.1 - User’s Manual

Introduction

What’s This Program for?

Fityk is a program for nonlinear fitting of analytical functions (especially peak-shaped) to data (usually experimental data). The most concise description: peak fitting software. There are also people using it to remove the baseline from data, or to display data only.

It is reportedly used in crystallography, chromatography, photoluminescence and photoelectron spectroscopy, infrared and Raman spectroscopy, to name but a few. Although the author has a general understanding only of experimental methods other than powder diffraction, he would like to make it useful to as many people as possible.

Fityk offers various nonlinear fitting methods, simple background subtraction and other manipulations to the dataset, easy placement of peaks and changing of peak parameters, support for analysis of series of datasets, automation of common tasks with scripts, and much more. The main advantage of the program is flexibility - parameters of peaks can be arbitrarily bound to each other, e.g. the width of a peak can be an independent variable, the same as the width of another peak, or can be given by complex (and general for all peaks) formula.

GUI vs CLI

The program comes in two versions: the GUI (Graphical User Interface) version - more comfortable for most users, and the CLI (Command Line Interface) version (named cfityk to differentiate).

technical note

The GUI version is written using the wxWidgets library. It runs on Unix species with GTK+, on MS Windows and (with some problems) on MacOS X.

If the CLI version was compiled with the GNU Readline Library, command line editing, TAB-expanding and command history will be available. On Unix, the gnuplot program can be used for data visualization.

About...

Fityk is free software; you can redistribute and modify it under the terms of the GPL, version 2 or (at your option) any later version.

To download the latest version of the program or to contact the author visit http://fityk.nieto.pl/.

This manual is written in ReStructuredText. All corrections and improvements are welcome. Use the Show Source link to get the source of the page, edit it and send me either the modified version or a patch.

Alternatively, go to GitHub, open corresponding rst file, press Fork and edit this file button, do edits in your web browser and click Propose file change.

The following people have contributed to this manual (in chronological order): Marcin Wojdyr (maintainer), Stan Gierlotka, Jaap Folmer, Michael Richardson.

One of the fitting methods uses MPFIT library (MINPACK-1 Least Squares Fitting Library in C), which includes software developed by the University of Chicago, as Operator of Argonne National Laboratory.

Getting Started

Graphical Interface

The GUI window of fityk consists of (from the top): menu bar, toolbar, main plot, helper (residual) plot, output window, input field, status bar and of sidebar at the right-hand side.

The input field with the output window provide a console-like interface to the program. The output windows shows also commands corresponding to operations performed using the GUI (menu, dialogs, etc.).

The main plot can display data points, model that is to be fitted to the data and component functions of the model. Use the pop-up menu (click right button on the plot) to configure it. Some properties of the plot (e.g. colors of data points) can be changed using the sidebar.

One of the most useful things which can be displayed by the helper plot is the difference between the data and the model (it is also controlled by a pop-up menu). Hopefully, a quick look at this menu and a minute or two’s worth of experiments will show the potential of this plot.

Configuration of the GUI (visible windows, colors, etc.) can be saved using GUI ‣ Save current config.

_images/fityk-with-tooltip.png

On the main plot, the meaning of the left and right mouse button depends on current mode. There are hints on the status bar. In normal mode, the left button is used for zooming and the right invokes the pop-up menu.

On the helper plot, selecting a horizontal range with the left button will show this range, automatically adjusting vertical range. The middle button shows the whole dataset (like Zoom All in the toolbar). The right button displays a menu.

Minimal Example

Let us analyze a diffraction pattern of NaCl. Our goal is to determine the position of the center of the highest peak. It is needed for calculating the pressure under which the sample was measured, but this later detail in the processing is irrelevent for the time being.

The data file used in this example is distributed with the program and can be found in the samples directory.

First load data from file nacl01.dat. You can do this by typing:

@0 < nacl01.dat

The CLI version of the program is all about typing commands. From time to time it is also handy to type a command in the GUI, but usually the GUI provides more intuitive, mouse-driven way to perform the same operation – it is mentioned in the the grey boxes below.

In the GUI

select Data ‣ Load File from the menu (or Load Data from the toolbar) and choose the file.

If you use the GUI, you can zoom-in to the biggest peak using left mouse button on the residual plot (the plot below the main plot). To zoom out, press the View whole toolbar button.

Now all data points are active. Because only the biggest peak is of interest for the sake of this example, the remaining points can be deactivated:

A = (x > 23.0 and x < 26.0)

In the GUI

change to the range mode (toolbar: Data-Range Mode) and deactivate not needed points with the right mouse button.

As our example data has no background to worry about, our next step is to define a peak with reasonable initial values and fit it to the data. We will use Gaussian. To see its formula, type: info Gaussian (or i Gaussian) or look for it in the section Built-In Functions.

To add a peak, either set the initial parameters manually:

F += Gaussian(~60000, ~24.6, ~0.2)

In the GUI

it is also possible to set the initial parameters with the mouse: change the GUI mode to Add-Peak Mode, click on the plot and drag the mouse to select the position, height and width of a new peak.

or let the program guess it:

guess Gaussian

In the GUI

select Gaussian from the list of functions on the toolbar and press Auto Add.

If the functions are not named explicitely (like in this example), they get automatic names %_1, %_2, etc.

Now let us fit the function. Type: fit.

In the GUI

select Fit ‣ Run from the menu or press Fit.

Important

Fitting minimizes the weighted sum of squared residuals (see Nonlinear Optimization). The default weights of points are not equal.

To see the peak parameters, type: info prop %_1.

In the GUI

move the cursor to the top of the peak and try out the context menu (the right mouse button), or check the parameters on the sidebar.

That’s it!

You can save all the issued commands to a file:

info history > myscript.fit

and later use it as a macro:

exec myscript.fit

In the GUI

use Session ‣ Save History and Session ‣ Execute script, correspondingly.

Mini-Language

Fityk comes with own domain-specific language (DSL), which is humbly called mini-language. All operations are driven by commands of the mini-language.

Do not worry

you do not need to learn the syntax of the mini-language. It is possible to use menus and dialogs in the GUI and avoid typing commands.

When you use the GUI and perform an action using the menu, you can see the corresponding command in the output window. It is one of less than 30 fityk commands. The commands have relatively simple syntax and perform single actions, such as loading data from file, adding function, assigning variable, fitting, or writing some values to a file.

It is possible to write a script (macro) as a sequence of such commands. This can automate common tasks, although some complex tasks still need to be programmed in a general-purpose language. That is why Fityk comes with embedded Lua (lightweight programming language) and also with bindings to Python and several other languages.

Now a quick glimpse at the syntax. Here, the =-> prompt marks an input:

=-> print pi
3.14159
=-> # this is a comment -- from `#' to the end of line
=-> p '2+3=', 2+3 # p stands for print
2+3 = 5
=-> set numeric_format='%.9f' # show 9 digits after dot
=-> pr pi, pi^2, pi^3 # pr, pri and prin also stand for print
3.141592654 9.869604401 31.006276680

Usually, one line is one command, but if it is really needed, two or more commands can be put in one line like this:

=-> $a = 3; $b = 5 # two commands separated with `;'

If the user works simultaneously with multiple datasets, she can refer to a dataset using its number: the first dataset is @0, the second – @1, etc:

=-> fit # perform fitting of the default dataset (the first one)
=-> @2: fit # fit the third dataset (@2)
=-> @*: fit # fit all datasets, one by one

All settings in the program are changed using the command set:

set key = value

For example:

=-> set logfile = 'C:\log.fit' # log all commands to this file
=-> set verbosity = 1 # make output from the program more verbose
=-> set epsilon = 1e-14

The last example changes the ε value, which is used to test floating-point numbers a and b for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): |a−b| < ε.

To change a setting only for one command, add with key=value before the command:

=-> with epsilon = 0.1 print pi == 3.14 # abusing epsilon
1
=-> print pi == 3.14 # default epsilon = 10^-12
0

Writing informally, each line has a syntax:

[[@...:] [with ...] command [";" command]...] [#comment]

In scripts and in the CLI backslash () at the end of the line means that the next line is continuation.

All the commands are described in the next chapters.

Important

The rest of this section can be useful as reference, but it is recommended to skip it when reading the manual for the first time.

To keep the description above concise, some details were skipped.

The datasets listed before the colon (:) make a foreach loop:

=-> $a=0
=-> @0 @0 @0: $a={$a+1}; print $a
1
2
3

@* stands for all datasets, from @0 to the last one.

There is a small difference between two commands in two lines and two commands separated by ;. The whole line is parsed before the execution begins and some checks for the second command are performed before the first command is run:

=-> $a=4; print $a # print gives unexpected error
Error: undefined variable: $a

=-> $b=2
=-> $b=4; print $b # $b is already defined at the check time
4

Grammar

The grammar is expressed in EBNF-like notation:

  • (*this is a comment*)
  • A* means 0 or more occurrences of A.
  • A+ means 1 or more occurrences of A.
  • A % B means A (B A)* and the % operator has the highest precedence. For example: term % "+" comment is the same as term ("+" term)* comment.
  • The colon ‘:’ in quoted string means that the string can be shortened, e.g. "del:ete" means that any of del, dele, delet and delete can be used.

The functions that can be used in p_expr and v_expr are available here and here, respectively. v_expr contains only a subset of functions from p_expr (partly, because we need to calculate symbolical derivatives of v_expr)

Line structure

line      ::=  [statement] [comment]
statement ::=  [Dataset+ ":"] [with_opts] command % ";"
with_opts ::=  "w:ith" (Lname "=" value) % ","
comment   ::=  "#" AllChars*

Commands

The kCmd* names in the comments correspond to constants in the code.

command ::=  (
             "deb:ug" RestOfLine              | (*kCmdDebug*)
             "def:ine" define                 | (*kCmdDefine*)
             "del:ete" delete                 | (*kCmdDelete*)
             "del:ete" delete_points          | (*kCmdDeleteP*)
             "e:xecute" exec                  | (*kCmdExec*)
             "f:it" fit                       | (*kCmdFit*)
             "g:uess" guess                   | (*kCmdGuess*)
             "i:nfo" info_arg % "," [redir]   | (*kCmdInfo*)
             "l:ua" RestOfLine                | (*kCmdLua*)
             "=" RestOfLine                   | (*kCmdLua*)
             "pl:ot" [range] [range] Dataset* | (*kCmdPlot*)
             "p:rint" print_args [redir]      | (*kCmdPrint*)
             "quit"                           | (*kCmdQuit*)
             "reset"                          | (*kCmdReset*)
             "s:et" (Lname "=" value) % ","   | (*kCmdSet*)
             "sleep" expr                     | (*kCmdSleep*)
             "title" "=" filename             | (*kCmdTitle*)
             "undef:ine" Uname % ","          | (*kCmdUndef*)
             "use" Dataset                    | (*kCmdUse*)
             "!" RestOfLine                   | (*kCmdShell*)
             Dataset "<" load_arg             | (*kCmdLoad*)
             Dataset "=" dataset_expr         | (*kCmdDatasetTr*)
             Funcname "=" func_rhs            | (*kCmdNameFunc*)
             param_lhs "=" v_expr             | (*kCmdAssignParam*)
             Varname "=" v_expr               | (*kCmdNameVar*)
             model_id ("="|"+=") model_rhs    | (*kCmdChangeModel*)
             (p_attr "[" expr "]" "=" p_expr) % "," | (*kCmdPointTr*)
             (p_attr "=" p_expr) % ","        | (*kCmdAllPointsTr*)
             "M" "=" expr                     ) (*kCmdResizeP*)

Other rules

define         ::=  Uname "(" (Lname [ "=" v_expr]) % "," ")" "="
                       ( v_expr |
                         component_func % "+" |
                         "x" "<" v_expr "?" component_func ":" component_func
                       )
component_func ::=  Uname "(" v_expr % "," ")"
delete         ::=  (Varname | func_id | Dataset | "file" filename) % ","
delete_points  ::=  "(" p_expr ")"
exec           ::=  filename |
                    "!" RestOfLine |
                    "=" RestOfLine
fit            ::=  [Number] [Dataset*] |
                    "+" Number |
                    "undo" |
                    "redo" |
                    "history" Number |
                    "clear_history"
guess          ::=  [Funcname "="] Uname ["(" (Lname "=" v_expr) % "," ")"] [range]
info_arg       ::=  ...TODO
print_args     ::=  [("all" | ("if" p_expr ":")]
                    (p_expr | QuotedString | "title" | "filename") % ","
redir          ::=  (">"|">>") filename
value          ::=  (Lname | QuotedString | expr) (*value type depends on the option*)
model_rhs      ::=  "0" |
                    func_id |
                    func_rhs |
                    model_id |
                    "copy" "(" model_id ")"
func_rhs       ::=  Uname "(" ([Lname "="] v_expr) % "," ")" |
                    "copy" "(" func_id ")"
load_arg       ::=  filename Lname* |
                    "."
p_attr         ::=  ("X" | "Y" | "S" | "A")
model_id       ::=  [Dataset "."] ("F"|"Z")
func_id        ::=  Funcname |
                    model_id "[" Number "]"
param_lhs      ::=  Funcname "." Lname |
                    model_id "[" (Number | "*") "]" "." Lname
var_id         ::=  Varname |
                    func_id "." Lname
range          ::=  "[" [expr] ":" [expr] "]"
filename       ::=  QuotedString | NonblankString

Mathematical expressions

expr        ::=  expr_or ? expr_or : expr_or
expr_or     ::=  expr_and % "or"
expr_and    ::=  expr_not % "and"
expr_not    ::=  "not" expr_not | comparison
comparison  ::=  arith % ("<"|">"|"=="|">="|"<="|"!=")
arith       ::=  term % ("+"|"-")
term        ::=  factor % ("*"|"/")
factor      ::=  ('+'|'-') factor | power
power       ::=  atom ['**' factor]
atom        ::=  Number | "true" | "false" | "pi" |
                 math_func | braced_expr | ?others?
math_func   ::=  "sqrt" "(" expr ")" |
                 "gamma" "(" expr ")" |
                  ...
braced_expr ::=  "{" [Dataset+ ":"] p_expr "}"

The atom rule also accepts some fityk expressions, such as $variable, %function.parameter, %function(expr), etc.

p_expr and v_expr are similar to expr, but they use additional variables in the atom rule.

p_expr recognizes n, M, x, y, s, a, X, Y, S and A. All of them but n and M can be indexed (e.g. x[4]). Example: (x+x[n-1])/2.

v_expr uses all unknown names (Lname) as variables. The tilde (~) can be used to create simple-variables. Only a subset of functions (math_func) from expr is supported. Examples: a+b*x^2, ~5.

Since v_expr is used to define variables and user-defined functions, the program calculates symbolically derivatives of v_expr. That is why not all the function from expr are supported (they may be added in the future).

dataset_expr supports very limited set of operators and a few functions that take Dataset token as argument (example: @0 - shirley_bg(@0)).

Lexer

Below, some of the tokens produced by the fityk lexer are defined.

The lexer is context-dependend: NonblankString and RestOfLine are produced only when they are expected in the grammar.

Uname is used only for function types (Gaussian) and pseudo-parameters (%f.Area).

Dataset        ::=  "@"(Digit+|"+"|"*")
Varname        ::=  "$" Lname
Funcname       ::=  "%" Lname
QuotedString   ::=  "'" (AllChars - "'")* "'"
Lname          ::=  (LowerCase | "_") (LowerCase | Digit | "_")*
Uname          ::=  UpperCase AlphaNum+
Number         ::=  ?number read by strtod()?
NonblankString ::=  (AllChars - (WhiteSpace | ";" | "#" ))*
RestOfLine     ::=  AllChars*

Data

Loading Data

Data files are read using the xylib library.

In the GUI

click Load Data. If it just works for your files, you may go straight to Active and Inactive Points.

Points are loaded from files using the command:

dataslot < filename[:xcol:ycol:scol:block] [filetype options...]

where

  • dataslot should be replaced with @0, unless many datasets are to be used simultaneously (for details see: Working with Multiple Datasets),
  • xcol, ycol, scol (supported only in text file) are columns corresponding to x, y and std. dev. of y. Column 0 means index of the point: 0 for the first point, 1 for the second, etc.
  • block is only supported by formats with multiple blocks of data.
  • filetype usually can be omitted, because in most of the cases the filetype can be detected; the list of supported filetypes is at the end of this section
  • options depend on a filetype and usually are omitted

If the filename contains blank characters, a semicolon or comma, it should be put inside single quotation marks (together with colon-separated indices, if any).

Multiple y columns and/or blocks can be specified, see the examples below:

@0 < foo.vms
@0 < foo.fii text first_line_header
@0 < foo.dat:1:4:: # x,y - 1st and 4th columns
@0 < foo.dat:1:3,4:: # load two dataset (with y in columns 3,4)
@0 < foo.dat:1:3..5:: # load three dataset (with y in columns 3,4,5)
@0 < foo.dat:1:4..6,2:: # load four dataset (y: 4,5,6,2)
@0 < foo.dat:1:2..:: # load 2nd and all the next columns as y
@0 < foo.dat:1:2:3: # read std. dev. of y from 3rd column
@0 < foo.dat:0:1:: # x - 0,1,2,..., y - first column
@0 < 'foo.dat:0:1::' # the same
@0 < foo.raw::::0,1 # load two first blocks of data (as one dataset)

Information about loaded data can be obtained with:

info data

Supported Filetypes

text
ASCII text, multicolumn numeric data. The details are given in the next section.
dbws
format used by DBWS (program for Rietveld analysis) and DMPLOT.
cpi
Sietronics Sieray CPI format
uxd
Siemens/Bruker UXD format (powder diffraction data)
bruker_raw
Simens-Bruker RAW format (version 1,2,3)
rigaku_dat
Rigaku dat format (powder diffraction data)
vamas
VAMAS ISO-14976 (only experiment modes: “SEM” or “MAPSV” or “MAPSVDP” and only “REGULAR” scan mode are supported)
philips_udf
Philips UDF (powder diffraction data)
philips_rd
Philips RD raw scan format V3 (powder diffraction data)
spe
Princeton Instruments WinSpec SPE format (only 1-D data is supported)
pdcif
CIF for powder diffraction

The full list is available at: http://xylib.sourceforge.net/.

Reading Text Files

The xylib library can read TSV or CSV formats (tab or comma separated values). In fact, the values can be separated by any whitespace character or by one of ,;: punctations, or by any combination of these.

Empty lines and comments that start with hash (#) are skipped.

Since there is a lot of files in the world that contain numeric data mixed with text, unless the strict option is given any text that can not be interpreted as a number is regarded a start of comment (the rest of the line is ignored).

Note that the file is parsed regardless of blocks and columns specified by the user. The data read from the file are first stored in a table with m columns and n rows. If some of the lines have 3 numbers in it, and some have 5 numbers, we can either discard the lines that have 3 numbers or we can discard the numbers in 4th and 5th column. Usually the latter is done, but there are exceptions. The shorter lines are ignored

  • if it is the last line in the file (probably the program was terminated while writing the file),
  • if it contains only one number, but the prior lines had more numbers (this may be a comment that starts with a number)
  • if all the (not ignored) prior lines and the next line are longer

These rule were introduced to read free-format log files with textual comments inserted between lines with numeric data.

For now, xylib does not handle well nan’s and inf’s in the data.

Data blocks and columns may have names. These names are used to set a title of the dataset (see Working with Multiple Datasets for details). If the option first_line_header is given and the number of words in the first line is equal to the number of data columns, each word is used as a name of corresponding column. If the number of words is different, the first line is used as a name of the block. If the last_line_header option is given, the line preceding the first data line is used to set either column names or the block name.

If the file starts with the “LAMMPS (” string, the last_line_header option is set automatically. This is very helpful when plotting data from LAMMPS log files.

Active and Inactive Points

We often have the situation that only a part of the data from a file is of interest. In Fityk, each point is either active or inactive. Inactive points are excluded from fitting and all calculations. (Since active points do not need to be in one region, we do not use the region of interest term here, but such region can be easy selected). A data transformation:

A = boolean-condition

can be used to change the state of points.

In the GUI

data points can be activated and disactivated with mouse in the data-range mode (toolbar: Data-Range Mode).

Standard Deviation (or Weight)

When fitting data, we assume that only the y coordinate is subject to statistical errors in measurement. This is a common assumption. To see how the y‘s standard deviation, σ, influences fitting (optimization), look at the weighted sum of squared residuals formula in Nonlinear Optimization. We can also think about weights of points – every point has a weight assigned, that is equal w_i=1/\sigma_i^2.

Standard deviation of points can be read from file together with the x and y coordinates. Otherwise, it is set either to max(y1/2, 1) or to 1, depending on the default_sigma option. Setting std. dev. as a square root of the value is common and has theoretical ground when y is the number of independent events. You can always change the standard deviation, e.g. make it equal for every point with the command: S=1. See Data Point Transformations for details.

Note

It is often the case that user is not sure what standard deviation should be assumed, but it is her responsibility to pick something.

Data Point Transformations

Every data point has four properties: x coordinate, y coordinate, standard deviation of y and active/inactive flag. These properties can be changed using symbols X, Y, S and A, respectively. It is possible to either change a single point or apply a transformation to all points. For example:

  • Y[3]=1.2 assigns the y coordinate of the 4th point (0 is first),
  • Y = -y changes the sign of the y coordinate for all points.

On the left side of the equality sign you can have one of symbols X, Y, S, A, possibly with the index in brackets. The symbols on the left side are case insensitive.

The right hand side is a mathematical expression that can have special variables:

  • lower case letters x, y, s, a represent properties of data points before transformation,
  • upper case X, Y, S, A stand for the same properties after transformation,
  • M stands for the number of points.
  • n stands for the index of currently transformed point, e.g., Y=y[M-n-1] means that n-th point (n=0, 1, ... M-1) is assigned y value of the n-th point from the end.

Before the transformation a new array of points is created as a copy of the old array. Operations are applied sequentially from the first point to the last one, so while Y[n+1] and y[n+1] have always the same value, Y[n-1] and y[n-1] may differ. For example, the two commands:

Y = y[n] + y[n-1]
Y = y[n] + Y[n-1]

differ. The first one adds to each point the value of the previous point. The second one adds the value of the previous point after transformation, so effectively it adds the sum of all previous points. The index [n] could be omitted (Y = y + y[n-1]). The value of undefined points, like y[-1] and Y[-1], is explained later in this section.

Expressions can contain:

  • real numbers in normal or scientific format (e.g. 1.23e5),
  • constants pi, true (1), false (0)
  • binary operators: +, -, *, /, ^,
  • boolean operators: and, or, not,
  • comparisions: >, >=, <, <=, ==, !=.
  • one argument functions:
    • sqrt
    • exp
    • log10
    • ln
    • sin
    • cos
    • tan
    • sinh
    • cosh
    • tanh
    • atan
    • asin
    • acos
    • erf
    • erfc
    • gamma
    • lgamma (=ln(|gamma()|))
    • abs
    • round (rounds to the nearest integer)
  • two argument functions:
    • mod (modulo)
    • min2
    • max2 (max2(3,5) gives 5),
    • randuniform(a, b) (random number from interval (a, b)),
    • randnormal(mu, sigma) (random number from normal distribution),
    • voigt(a, b) = \frac{b}{\pi} \int_{-\infty}^{+\infty} \frac{\exp(-t^2)}{b^2+(a-t)^2} dt
  • ternary ?: operator: condition ?  expression1 : expression2, which returns expression1 if condition is true and expression2 otherwise.

A few examples.

  • The x scale of diffraction pattern can be changed from 2θ to Q:

    X = 4*pi * sin(x/2*pi/180) / 1.54051 # Cu 2θ -> Q
    
  • Negative y values can be zeroed:

    Y = max2(y, 0)
    
  • All standard deviations can be set to 1:

    S = 1
    
  • It is possible to select active range of data:

    A = x > 40 and x < 60 # select range (40, 60)
    

All operations are performed on real numbers. Two numbers that differ less than ε (the value of ε is set by the option epsilon) are considered equal.

Points can be created or deleted by changing the value of M. For example, the following commands:

M=500; x=n/100; y=sin(x)

create 500 points and generate a sinusoid.

Points are kept sorted according to their x coordinate. The sorting is performed after each transformation.

Note

Changing the x coordinate may change the order and indices of points.

Indices, like all other values, are computed in the real number domain. If the index is not integer (it is compared using ε to the rounded value):

  • x, y, s, a are interpolated linearly. For example, y[2.5] is equal to (y[2]+[3])/2. If the index is less than 0 or larger than M-1, the value for the first or the last point, respectively, is returned.
  • For X, Y, S, A the index is rounded to integer. If the index is less than 0 or larger than M-1, 0 is returned.

Transformations separated by commas (,) form a sequance of transformations. During the sequance, the vectors x, y, s and a that contain old values are not changed. This makes possible to swap the axes:

X=y, Y=x

The special index(arg) function returns the index of point that has x equal arg, or, if there is no such point, the linear interpolation of two neighbouring indices. This enables equilibrating the step of data (with interpolation of y and σ):

X = x[0] + n * (x[M-1]-x[0]) / (M-1), Y = y[index(X)], S = s[index(X)]

It is possible to delete points for which given condition is true, using expression delete(condition):

delete(not a) # delete inactive points

# reduce twice the number of points, averaging x and adding y
x = (x[n]+x[n+1])/2
y = y[n]+y[n+1]
delete(mod(n,2) == 1)

If you have more than one dataset, you may need to specify to which dataset the transformation applies. See Working with Multiple Datasets for details.

The value of a data expression can be shown using the print command. The precision of printed numbers is governed by the numeric_format option.

print M # the number of points
print y[index(20)] # value of y for x=20

Aggregate Functions

Aggregate functions have syntax:

aggregate(expression [if condition])

and return a single value, calculated from values of all points for which the given condition is true. If the condition is omitted, all points in the dataset are taken into account.

The following aggregate functions are recognized:

  • min() — the smallest value,

  • max() — the largest value,

  • argmin() — (stands for the argument of the minimum)

    the x value of the point for which the expression in brackets has the smallest value,

  • argmax() — the x value of the point for which the expression

    in brackets has the largest value,

  • sum() — the sum,

  • count() — the number of points for which the expression is true,

  • avg() — the arithmetic mean,

  • stddev() — the standard deviation,

  • darea() — a function used to normalize the area (see the example below). It returns the sum of expression*(x[n+1]-x[n-1])/2. In particular, darea(y) returns the interpolated area under data points.

Examples:

p avg(y) # print the average y value
p max(y) # the largest y value
p argmax(y) # the position of data maximum
p max(y if x > 40 and x < 60)   # the largest y value for x in (40, 60)
p max(y if a) # the largest y value in the active range
p min(x if y > 0.1)] # x of the first point with y > 0.1
p count(y>100) # the number of points that have y above 100
p count(y>avg(y)) # aggregate functions can be nested
p y[min(n if y > 100)] # the first (from the left) value of y above 100

# take the first 2000 points, average them and subtract as background
Y = y - avg(y if n<2000)

Y = y / darea(y) # normalize data area

# make active only the points on the left from the first
# point with y > 0.1
a = x < min(x if y > 0.1)]

Functions and Variables in Data Transformation

You may postpone reading this section and read about the Models first.

Variables ($foo) and functions (%bar) can be used in data expressions:

Y = y / $foo  # divides all y's by $foo
Y = y - %f(x) # subtracts function %f from data
Y = y - @0.F(x) # subtracts all functions in F

# print the abscissa value of the maximum of the model
# (only the values in points are considered,
#  so it's not exactly the model's maximum)
print argmax(F(x))

# print the maximum of the sum of two functions
print max(%_1(x) + %_2(x))

# Fit constant x-correction (i.e. fit the instrumental zero error), ...
Z = Constant(~0)
fit
X = x + Z(x)        # ... correct the data
Z = 0               # ... and remove the correction from the model.

In the GUI

in the Baseline Mode (Baseline Mode), functions Spline and Polyline are used to subtract manually selected background. Clicking Strip Background results in a command like this:

%bg0 = Spline(14.2979,62.1253, 39.5695,35.0676, 148.553,49.9493)
Y = y - %bg0(x)

Clicking the same button again undoes the subtraction:

Y = y + %bg0(x)

The function edited in the Baseline Mode is always named %bgX, where X is the index of the dataset.

Values of the function parameters (e.g. %fun.a0) and pseudo-parameters Center, Height, FWHM and Area (e.g. %fun.Area) can also be used. Pseudo-parameters are supported only by functions, which know how to calculate these properties.

It is also possible to calculate some properties of %functions:

  • %f.numarea(x1, x2, n) gives area integrated numerically from x1 to x2 using trapezoidal rule with n equal steps.
  • %f.findx(x1, x2, y) finds x in interval (x1, x2) such that %f(x)=y using bisection method combined with Newton-Raphson method. It is a requirement that %f(x1) < y < %f(x2).
  • %f.extremum(x1, x2) finds x in interval (x1, x2) such that %f’(x)=0 using bisection method. It is a requirement that %f’(x1) and %f’(x2) have different signs.

A few examples:

print %fun.numarea(, 0, 100, 10000) # shows area of function %fun
print %_1(%_1.extremum(40, 50)) # shows extremum value

# calculate FWHM numerically, value 50 can be tuned
$c = {%f.Center}
p %f.findx($c, $c+50, %f.Height/2) - %f.findx($c, $c-50, %f.Height/2)
p %f.FWHM # should give almost the same.

Working with Multiple Datasets

Let us call a set of data that usually comes from one file – a dataset. It is possible to work simultaneously with multiple datasets. Datasets have numbers and are referenced by @ with the number, (e.g. @3). The user can specify which dataset the command should be applied to:

@0: M=500    # change the number of points in the first dataset
@1 @2: M=500 # the same command applied to two datasets
@*: M=500    # and the same applied to all datasets

If the dataset is not specified, the command applies to the default dataset, which is initially @0. The use command changes the default dataset:

use @2 # set @2 as default

To load dataset from file, use one of the commands:

@n < filename:xcol:ycol:scol:block filetype options...

@+ < filename:xcol:ycol:scol:block filetype options...

The first one uses existing data slot and the second one creates a new slot. Using @+ increases the number of datasets, and the command delete @n decreases it.

The dataset can be duplicated (@+ = @n) or transformed, more on this in the next section.

Each dataset has a separate model, that can be fitted to the data. This is explained in the next chapter.

Each dataset also has a title (it does not have to be unique, however). When loading file, a title is automatically created:

  • if there is a name associated with the column ycol, the title is based on it;
  • otherwise, if there is a name associated with the data block read from file, the title is set to this name;
  • otherwise, the title is based on the filename

Titles can be changed using the command:

@n: title = 'new-title'

To print the title of the dataset, type @n: info title.

Dataset Transformations

There are a few transformations defined for a whole dataset or for two datasets. The syntax is @n = ... or @+ = .... The the right hand side expression supports the following operations:

-@n
negation of all y values,
d * @n
(e.g. 0.4*@0) y values are multiplied by d,
@n + @m
returns @n with added y values from interpolated @m,
@n - @m
returns @n with subtracted y values from interpolated @m,
@n and @m
returns points from both datasets (re-sorted),

and functions:

sum_same_x(@n)
Merges points which have distance in x is smaller than epsilon. x of the merged point is the average, and y and σ are sums of components.
avg_same_x(@n)
The same as sum_same_x, but y and σ are set as the average of components.
shirley_bg(@n)
Calculates Shirley background (useful in X-ray photoelectron spectroscopy).

Examples:

@+ = @0 # duplicate the dataset
@+ = @0 and @1 # create a new dataset from @0 and @1
@0 = @0 - shirley_bg(@0) # remove Shirley background
@0 = @0 - @1 # subtract @1 from @0
@0 = @0 - 0.28*@1 # subtract scaled dataset @1 from @0

Exporting Data

Command:

print all: expression, ... > file.tsv

can export data to an ASCII TSV (tab separated values) file.

In the GUI

Data ‣ Export

To export data in a 3-column (x, y and standard deviation) format, use:

print all: x, y, s > file.tsv

Any expressions can be printed out:

p all: n+1, x, y, F(x), y-F(x), %foo(x), sin(pi*x)+y^2 > file.tsv

It is possible to select which points are to be printed by replacing all with if followed by a condition:

print if a: x, y # only active points are printed
print if x > 30 and x < 40: x, y # only points in (30,40)

The option numeric_format controls the format and precision of all numbers.

Models

From Numerical Recipes, chapter 15.0:

Given a set of observations, one often wants to condense and summarize the data by fitting it to a “model” that depends on adjustable parameters. Sometimes the model is simply a convenient class of functions, such as polynomials or Gaussians, and the fit supplies the appropriate coefficients. Other times, the model’s parameters come from some underlying theory that the data are supposed to satisfy; examples are coefficients of rate equations in a complex network of chemical reactions, or orbital elements of a binary star. Modeling can also be used as a kind of constrained interpolation, where you want to extend a few data points into a continuous function, but with some underlying idea of what that function should look like.

This chapter shows how to construct the model.

Complex models are often a sum of many functions. That is why in Fityk the model F is constructed as a list of component functions and is computed as F = \sum_i f_i.

Each component function f_i is one of predefined functions, such as Gaussian or polynomial. This is not a limitation, because the user can add any function to the predefined functions.

To avoid confusion, the name function will be used only when referring to a component function, not when when referring to the sum (model), which mathematically is also a function. The predefined functions will be sometimes called function types.

Function f_i=f_i(x; \boldsymbol{a}) is a function of x, and depends on a vector of parameters \boldsymbol{a}. The parameters \boldsymbol{a} will be fitted to achieve agreement of the model and data.

In experiments we often have the situation that the measured x values are subject to systematic errors caused, for example, by instrumental zero shift or, in powder diffraction measurements, by displacement of sample in the instrument. If this is the case, such errors should be a part of the model. In Fityk, this part of the model is called x-correction. The final formula for the model is:

F(x; \boldsymbol{a}) = \sum_i f_i(x+Z(x; \boldsymbol{a}); \boldsymbol{a})

where Z(x; \boldsymbol{a}) = \sum_i z_i(x; \boldsymbol{a}) is the x-correction. Z is constructed as a list of components, analogously to F, although in practice it has rarely more than one component.

Each component function is created by specifying a function type and binding variables to type’s parameters. The next section explains what are variables in Fityk, and then we get back to functions.

Variables

Variables have names prefixed with the dollar symbol ($) and are created by assigning a value:

$foo=~5.3           # simple-variable
$bar=5*sin($foo)    # compound-variable
$c=3.1              # constant (the simplest compound-variable)

The numbers prefixed with the tilde (~) are adjustable when the model is fitted to the data. Variable created by assigning ~number (like $foo in the example above) will be called a simple-variable.

All other variables are called compound-variables. Compound variables either depend on other variables ($bar above) or are constant ($c).

Important

Unlike in popular programming languages, variable can store either a single numeric (floating-point) value or a mathematical expression. Nothing else. In case of expression, if we define $b=2*$a the value of $b will be recalculated every time $a changes.

To assign a value (constant) of another variable, use: $b={$a}. Braces return the current value of the enclosed expression. The left brace can be preceded by the tilde (~). The assignment $b=~{$a} creates a simple variable.

Compound-variables can be build using operators +, -, *, /, ^ and the functions sqrt, exp, log10, ln, sin, cos, tan, sinh, cosh, tanh, atan, asin, acos, erf, erfc, lgamma, abs, voigt. This is a subset of the functions used in data transformations.

The braces may contain any data expression:

$x0 = {x[0]}
$min_y = {min(y if a)}
$c = {max2($a, $b)}
$t = {max(x) < 78 ? $a : $b}

Sometimes it is useful to freeze a variable, i.e. to prevent it from changing while fitting:

$a = ~12.3 # $a is fittable (simple-variable)
$a = {$a}  # $a is not fittable (constant)
$a = ~{$a} # $a is fittable (simple-variable) again

In the GUI

a variable can be switched between constant and simple-variable by clicking the padlock button on the sidebar. The icons open lock and lock show that the variable is fittable and frozen, respectively.

If the assigned expression contains tildes:

$bleh=~9.1*exp(~2)

it automatically creates simple-variables corresponding to the tilde-prefixed numbers. In the example above two simple-variables (with values 9.1 and 2) are created. Automatically created variables are named $_1, $_2, $_3, and so on.

Variables can be deleted using the command:

delete $variable

Some fitting algorithms randomize the parameters of the model (i.e. they randomize simple variables). To effectively use such algorithms, the user should specify a domain for each simple-variable, i.e. the minimum and maximum value. The domain does not imply any constraints on the value the variable can have – it is only a hint for fitting algorithms.

The default algorithm (Lev-Mar) does not need it, so in most cases you do not need to worry about domains.

Domains are used by the Nelder-Mead method and Genetic Algorithms. The syntax is as follows:

$a = ~12.3 [0:20] # initial values are drawn from the (0, 20) range

If the domain is not specified, the default domain is used, which is ±p% of the current value, where p can be set using the domain_percent option.

Function Types and Functions

Function types have names that start with upper case letter, e.g. Linear or Voigt.

Functions have names prefixed with the percent symbol, e.g. %func. Every function has a type and variables bound to its parameters.

Functions can be created by giving the type and the correct number of variables in brackets, e.g.:

%f1 = Gaussian(~66254., ~24.7, ~0.264)
%f2 = Gaussian(~6e4, $ctr, $b+$c)
%f3 = Gaussian(height=~66254., hwhm=~0.264, center=~24.7)

Every expression which is valid on the right-hand side of a variable assignment can be used as a variable. If it is not just a name of a variable, an automatic variable is created. In the above examples, two variables were implicitely created for %f2: first for value 6e4 and the second for $b+$c).

If the names of function’s parameters are given (like for %f3), the variables can be given in any order.

Function types can can have specified default values for some parameters. The variables for such parameters can be omitted, e.g.:

=-> i Pearson7
Pearson7(height, center, hwhm, shape=2) = height/(1+((x-center)/hwhm)^2*(2^(1/shape)-1))^shape
=-> %f4 = Pearson7(height=~66254., center=~24.7, fwhm=~0.264) # no shape is given
New function %f4 was created.

Functions can be copied. The following command creates a deep copy (i.e. all variables are also duplicated) of %foo:

%bar = copy(%foo)

Functions can be also created with the command guess, as described in Guessing Initial Parameters.

Variables bound to the function parameters can be changed at any time:

=-> %f = Pearson7(height=~66254., center=~24.7, fwhm=~0.264)
New function %f was created.
=-> %f.center=~24.8
=-> $h = ~66254
=-> %f.height=$h
=-> info %f
%f = Pearson7($h, $_5, $_3, $_4)
=-> $h = ~60000 # variables are kept by name, so this also changes %f
=-> %p1.center = %p2.center + 3 # keep fixed distance between %p1 and %p2

Functions can be deleted using the command:

delete %function

Built-In Functions

The list of all functions can be obtained using i types. Some formulae here have long parameter names (like “height”, “center” and “hwhm”) replaced with a_i

Gaussian:

y = a_0
    \exp\left[-\ln(2)\left(\frac{x-a_1}{a_2}\right)^{2}\right]

SplitGaussian:

y(x;a_0,a_1,a_2,a_3) = \begin{cases}
\textrm{Gaussian}(x;a_0,a_1,a_2) & x\leq a_1\\
\textrm{Gaussian}(x;a_0,a_1,a_3) & x>a_1\end{cases}

GaussianA:

y = \sqrt{\frac{\ln(2)}{\pi}}\frac{a_0}{a_2}
    \exp\left[-\ln(2)\left(\frac{x-a_1}{a_2}\right)^{2}\right]

Lorentzian:

y = \frac{a_0}{1+\left(\frac{x-a_1}{a_2}\right)^2}

SplitLorentzian:

y(x;a_0,a_1,a_2,a_3) = \begin{cases}
\textrm{Lorentzian}(x;a_0,a_1,a_2) & x\leq a_1\\
\textrm{Lorentzian}(x;a_0,a_1,a_3) & x>a_1\end{cases}

LorentzianA:

y = \frac{a_0}{\pi a_2\left[1+\left(\frac{x-a_1}{a_2}\right)^2\right]}

Pearson VII (Pearson7):

y = \frac{a_0} {\left[1+\left(\frac{x-a_1}{a_2}\right)^2
                        \left(2^{\frac{1}{a_3}}-1\right)\right]^{a_3}}

split Pearson VII (SplitPearson7):

y(x;a_{0},a_{1},a_{2},a_{3},a_{4},a_{5}) = \begin{cases}
 \textrm{Pearson7}(x;a_0,a_1,a_2,a_4) & x\leq a_1\\
 \textrm{Pearson7}(x;a_0,a_1,a_3,a_5) & x>a_1\end{cases}

Pearson VII Area (Pearson7A):

y = \frac{a_0\Gamma(a_3)\sqrt{2^{\frac{1}{a_3}}-1}}
         {a_2\Gamma(a_3-\frac{1}{2})\sqrt{\pi} \left[
            1 + \left(\frac{x-a_1}{a_2}\right)^2
                \left(2^{\frac{1}{a_3}}-1\right)
         \right]^{a_3}}

Pseudo-Voigt (PseudoVoigt):

y = a_0 \left[(1-a_3)\exp\left(-\ln(2)\left(\frac{x-a_1}{a_2}\right)^2\right)
              + \frac{a_3}{1+\left(\frac{x-a_1}{a_2}\right)^2}
        \right]

Pseudo-Voigt is a name given to the sum of Gaussian and Lorentzian. a_3 parameters in Pearson VII and Pseudo-Voigt are not related.

split Pseudo-Voigt (SplitPseudoVoigt):

y(x;a_{0},a_{1},a_{2},a_{3},a_{4},a_{5}) = \begin{cases}
 \textrm{PseudoVoigt}(x;a_0,a_1,a_2,a_4) & x\leq a_1\\
 \textrm{PseudoVoigt}(x;a_0,a_1,a_3,a_5) & x>a_1\end{cases}

Pseudo-Voigt Area (PseudoVoigtA):

y = a_0 \left[\frac{(1-a_3)\sqrt{\ln(2)}}{a_2\sqrt{\pi}}
              \exp\left(-\ln2\left(\frac{x-a_1}{a_2}\right)^2\right)
              + \frac{a_3}{\pi a_2
                           \left[1+\left(\frac{x-a_1}{a_2}\right)^2\right]}
        \right]

Voigt:

y = \frac
    {a_0 \int_{-\infty}^{+\infty}
             \frac{\exp(-t^2)}{a_3^2+(\frac{x-a_1}{a_2}-t)^2} dt}
    {\int_{-\infty}^{+\infty}
             \frac{\exp(-t^2)}{a_3^2+t^2} dt}

The Voigt function is a convolution of Gaussian and Lorentzian functions. a_0 = heigth, a_1 = center, a_2 is proportional to the Gaussian width, and a_3 is proportional to the ratio of Lorentzian and Gaussian widths.

Voigt is computed according to R.J.Wells, Rapid approximation to the Voigt/Faddeeva function and its derivatives, Journal of Quantitative Spectroscopy & Radiative Transfer 62 (1999) 29-48. (See also: http://www.atm.ox.ac.uk/user/wells/voigt.html). The approximation is very fast, but not very exact.

FWHM is estimated using the approximation by Olivero and Longbothum (JQSRT 17, 233 (1977)): 0.5346 w_L + \sqrt{0.2169 w_L^2 + w_G^2}.

VoigtA:

y = \frac{a_0}{\sqrt{\pi}a_2}
    \int_{-\infty}^{+\infty}
        \frac{\exp(-t^2)}{a_3^2+(\frac{x-a_1}{a_2}-t)^2} dt

Exponentially Modified Gaussian (EMG):

y = \frac{ac\sqrt{2\pi}}{2d}
    \exp\left(\frac{c^2}{2d^2}-\frac{x-b}{d}\right)
    \left[\frac{d}{\left|d\right|}
          +\textrm{erf}\left(\frac{x-b}{\sqrt{2}c}
                             - \frac{c}{\sqrt{2}d}\right)
    \right]

The exponentially modified Gaussian is a convolution of Gaussian and exponential probability density. a = Gaussian heigth, b = location parameter (Gaussian center), c = Gaussian width, d = distortion parameter (a.k.a. modification factor or time constant).

LogNormal:

y = h \exp\left\{ -\ln(2) \left[
                                \frac{\ln\left(1+2b\frac{x-c}{w}\right)}{b}
                         \right]^{2} \right\}

Doniach-Sunjic (DoniachSunjic):

y = \frac{h\left[\frac{\pi a}{2}
                 + (1-a)\arctan\left(\frac{x-E}{F}\right)\right]}
         {F+(x-E)^2}

Polynomial5:

y = a_0 + a_1 x +a_2 x^2 + a_3 x^3 + a_4 x^4 + a_5 x^5

Variadic Functions

Variadic function types have variable number of parameters. Two variadic function types are defined:

Spline(x1, y1, x2, y2, ...)
Polyline(x1, y1, x2, y2, ...)

This example:

%f = Spline(22.1, 37.9, 48.1, 17.2, 93.0, 20.7)

creates a function that is a natural cubic spline interpolation through points (22.1, 37.9), (48.1, 17.2), ....

The Polyline function is a polyline interpolation (spline of order 1).

Both Spline and Polyline functions are primarily used for the manual baseline subtraction via the GUI.

The derivatives of Spline function are not calculated, so this function is not refined by the default, derivative-based fitting algorithm.

Since the Polyline derivatives are calculated, it is possible to perform weighted least squares approximation by broken lines, although non-linear fitting algorithms are not optimal for this task.

User-Defined Functions (UDF)

User-defined function types can be added using command define, and then used in the same way as built-in functions.

Example:

define MyGaussian(height, center, hwhm) = height*exp(-ln(2)*((x-center)/hwhm)^2)
  • The name of new type must start with an upper-case letter, contain only letters and digits and have at least two characters.

  • The name of the type is followed by parameters in brackets.

  • Parameter name must start with lowercase letter and, contain only lowercase letters, digits and the underscore (‘_’).

  • The name “x” is reserved, do not put it into parameter list, just use it on the right-hand side of the definition.

  • There are special names of parameters that Fityk understands:

    • if the functions is peak-like: height, center, hwhm, area,
    • if the function is more like linear: slope, intercept, avgy.

    The initial values of these parameters can be guessed (command guess) from the data. hwhm means half width at half maximum, the other names are self-explaining.

  • Each parameter may have a default value (see the examples below). The default value can be either a number or an expression that depends on the parameters listed above (e.g. 0.8*hwhm). The default value always binds a simple-variable to the parameter.

UDFs can be defined in a few ways:

  • by giving a full formula, like in the example above,
  • as a re-parametrization of existing function (see the GaussianArea example below),
  • as a sum of already defined functions (see the GLSum example below),
  • as a splitted (bifurcated) function: x < expression ? Function1(...) : Function2(...) (see the SplitL example below).

When giving a full formula, the right-hand side of the equality sign is similar to the definiton of variable, but the formula can also depend on x. Hopefully the examples can make the syntax clear:

# this is how some built-in functions could be defined
define MyGaussian(height, center, hwhm) = height*exp(-ln(2)*((x-center)/hwhm)^2)
define MyLorentzian(height, center, hwhm) = height/(1+((x-center)/hwhm)^2)
define MyCubic(a0=height,a1=0, a2=0, a3=0) = a0 + a1*x + a2*x^2 + a3*x^3

# supersonic beam arrival time distribution
define SuBeArTiDi(c, s, v0, dv) = c*(s/x)^3*exp(-(((s/x)-v0)/dv)^2)/x

# area-based Gaussian can be defined as modification of built-in Gaussian
# (it is the same as built-in GaussianA function)
define GaussianArea(area, center, hwhm) = Gaussian(area/hwhm/sqrt(pi/ln(2)), center, hwhm)

# sum of Gaussian and Lorentzian, a.k.a. PseudoVoigt (should be in one line)
define GLSum(height, center, hwhm, shape) = Gaussian(height*(1-shape), center, hwhm)
+ Lorentzian(height*shape, center, hwhm)

# split-Gaussian, the same as built-in SplitGaussian (should be in one line)
define SplitG(height, center, hwhm1=fwhm*0.5, hwhm2=fwhm*0.5) =
  x < center ? Lorentzian(height, center, hwhm1)
             : Lorentzian(height, center, hwhm2)

There is a simple substitution mechanism that makes writing complicated functions easier. Substitutions must be assigned in the same line, after the keyword where.

Example:

define ReadShockley(sigma0=1, a=1) = sigma0 * t * (a - ln(t)) where t=x*pi/180

# more complicated example, with nested substitutions
define FullGBE(k, alpha) = k * alpha * eta * (eta / tanh(eta) - ln (2*sinh(eta))) where eta = 2*pi/alpha * sin(theta/2), theta=x*pi/180

How it works internally

The formula is parsed, derivatives of the formula are calculated symbolically, expressions are simplified and bytecode for virtual machine (VM) is created.

When fitting, the VM calculates the value of the function and derivatives for every point.

Defined functions can be undefined using command undefine:

undefine GaussianArea

It is common to add own definitions to the init file. See the section Starting fityk and cfityk for details.

Cutoff

With default settings, the value of every function is calculated at every point. Peak functions, such as Gaussian, often have non-negligible values only in a small fraction of all points, so if you have many narrow peaks (like here), the basic optimization is to calculate values of each peak function only near the function’s center. If the option function_cutoff is set to a non-zero value, each function is evaluated only in the range where its values are greater than the function_cutoff.

This optimization is supported only by some built-in functions.

Model, F and Z

As already discussed, each dataset has a separate model that can be fitted to the data. As can be seen from the formula at the beginning of this chapter, the model is defined as a set functions f_i and a set of functions z_i. These sets are named F and Z respectively. The model is constructed by specifying names of functions in these two sets.

In many cases x-correction Z is not used. The fitted curve is thus the sum of all functions in F.

Command:

F += %function

adds %function to F, and

Z += %function

adds %function to Z.

A few examples:

# create and add function to F
%g = Gaussian(height=~66254., hwhm=~0.264, center=~24.7)
F += %g

# create unnamed function and add it to F
F += Gaussian(height=~66254., hwhm=~0.264, center=~24.7)

# clear F
F = 0

# clear F and put three functions in it
F = %a + %b + %c

# show info about the first and the last function in F
info F[0], F[-1]

The next sections shows an easier way to add a function (command guess).

If there is more than one dataset, F and Z can be prefixed with the dataset number (e.g. @1.F).

The model can be copied. To copy the model from @0 to @1 we type one of the two commands:

@1.F = @0.F        # shallow copy
@1.F = copy(@0.F)  # deep copy

The former command uses the same functions in both models: if you shift a peak in @1, it will be also shifted in @0. The latter command (deep copy) duplicates all functions and variables and makes an independent model.

In the GUI

click the button Copy-Model on the sidebar to make a deep copy.

It is often required to keep the width or shape of peaks constant for all peaks in the dataset. To change the variables bound to parameters with a given name for all functions in F, use the command:

F[*].param = variable

Examples:

# Set hwhm of all functions in F that have a parameter hwhm to $foo
# (hwhm here means half-width-at-half-maximum)
F[*].hwhm = $foo

# Bound the variable used for the shape of peak %_1 to shapes of all
# functions in F
F[*].shape = %_1.shape

# Create a new simple-variable for each function in F and bound the
# variable to parameter hwhm. All hwhm parameters will be independent.
F[*].hwhm = ~0.2

In the GUI

buttons =W and =S on the sidebar make, respectively, the HWHM and shape of all functions the same. Pressing the buttons again will make all the parameters independent.

Guessing Initial Parameters

The program can automatically set initial parameters of peaks (using peak-detection algorithm) and lines (using linear regression). Choosing initial parameters of a function by the program will be called guessing.

It is possible to guess peak location and add it to F with the command:

guess [%name =] PeakType [(initial values...)] [[x1:x2]]

Examples:

# add Gaussian in the given range
@0: guess Gaussian [22.1:30.5]

# the same, but name the new function %f1
@0: guess %f1 = Gaussian [22.1:30.5]

# search for the peak in the whole dataset
@0: guess Gaussian

# add one Gaussian to each dataset
@*: guess Gaussian

# set the center and shape explicitely (determine height and width)
guess PseudoVoigt(center=$ctr, shape=~0.3) [22.1:30.5]
  • Name of the function is optional.
  • Some of the parameters can be specified in brackets.
  • If the range is omitted, the whole dataset will be searched.

Fityk offers a simple algorithm for peak-detection. It finds the highest point in the given range (center and height), and than tries to find the width of the peak (hwhm, and area = height × hwhm).

If the highest point is at boundary of the given range, the points from the boundary to the nearest local minimum are ignored.

The values of height and width found by the algorithm are multiplied by the values of options height_correction and width_correction, respectively. The default value for both options is 1.

The linear traits slope and intercept are calculated using linear regression (without weights of points). avgy is calculated as average value of y.

In the GUI

select a function from the list of functions on the toolbar and press Auto Add to add (guess) the selected function.

To choose a data range change the GUI mode to Add-Peak Mode and select the range with the right mouse button.

Displaying Information

The info command can be show useful information when constructing the model.

info types
shows the list of available function types.
info FunctionType
(e.g. info Pearson7) shows the formula (definition).
info guess [range]
shows where the guess command would locate a peak.
info functions
lists all defined functions.
info variables
lists all defined variables.
info F
lists components of F.
info Z
lists components of Z.
info formula
shows the full mathematical formula of the fitted model.
info simplified_formula
shows the same, but the formula is simplified.
info gnuplot_formula
shows same as formula, but the output is readable by gnuplot, e.g. x^2 is replaced by x**2.
info simplified_gnuplot_formula
shows the simplified formula in the gnuplot format.
info peaks
show a formatted list of parameters of functions in F.
info peaks_err
shows the same data, additionally including uncertainties of the parameters.
info models
a script that reconstructs all variables, functions and models.

The last two commands are often redirected to a file (info peaks > filename).

The complete list of info arguments can be found in Information Display.

In the GUI

most of the above commands has clickable equivalents.

Curve Fitting

Nonlinear Optimization

This is the core. We have a set of observations (data points), to which we want to fit a model that depends on adjustable parameters. Let me quote Numerical Recipes, chapter 15.0, page 656):

The basic approach in all cases is usually the same: You choose or design a figure-of-merit function (merit function, for short) that measures the agreement between the data and the model with a particular choice of parameters. The merit function is conventionally arranged so that small values represent close agreement. The parameters of the model are then adjusted to achieve a minimum in the merit function, yielding best-fit parameters. The adjustment process is thus a problem in minimization in many dimensions. [...] however, there exist special, more efficient, methods that are specific to modeling, and we will discuss these in this chapter. There are important issues that go beyond the mere finding of best-fit parameters. Data are generally not exact. They are subject to measurement errors (called noise in the context of signal-processing). Thus, typical data never exactly fit the model that is being used, even when that model is correct. We need the means to assess whether or not the model is appropriate, that is, we need to test the goodness-of-fit against some useful statistical standard. We usually also need to know the accuracy with which parameters are determined by the data set. In other words, we need to know the likely errors of the best-fit parameters. Finally, it is not uncommon in fitting data to discover that the merit function is not unimodal, with a single minimum. In some cases, we may be interested in global rather than local questions. Not, “how good is this fit?” but rather, “how sure am I that there is not a very much better fit in some corner of parameter space?”

Our function of merit is the weighted sum of squared residuals (WSSR), also called chi-square:

\chi^{2}(\mathbf{a})
  =\sum_{i=1}^{N} \left[\frac{y_i-y(x_i;\mathbf{a})}{\sigma_i}\right]^{2}
  =\sum_{i=1}^{N} w_{i}\left[y_{i}-y(x_{i};\mathbf{a})\right]^{2}

Weights are based on standard deviations, w_i=1/\sigma_i^2. You can learn why squares of residuals are minimized e.g. from chapter 15.1 of Numerical Recipes.

So we are looking for a global minimum of \chi^2. This field of numerical research (looking for a minimum or maximum) is usually called optimization; it is non-linear and global optimization. Fityk implements three very different optimization methods. All are well-known and described in many standard textbooks.

The standard deviations of the best-fit parameters are given by the square root of the corresponding diagonal elements of the covariance matrix. The covariance matrix is based on standard deviations of data points. Formulae can be found e.g. in GSL Manual, chapter Least-Squares Fitting. Fitting Overview (weighted data version).

Uncertainty of Parameters

From the book J. Wolberg, Data Analysis Using the Method of Least Squares: Extracting the Most Information from Experiments, Springer, 2006, p.50:

(...) we turn to the task of determining the uncertainties associated with the a_k‘s. The usual measures of uncertainty are standard deviation (i.e., σ) or variance (i.e., σ2) so we seek an expression that allows us to estimate the \sigma_{a_k}‘s. It can be shown (...) that the following expression gives us an unbiased estimate of \sigma_{a_k}:

\sigma_{a_k}^{2}=\frac{S}{n-p}C_{kk}^{-1}

Note that \sigma_{a_k} is a square root of the value above. In this formula n-p, the number of (active) data points minus the number of independent parameters, is equal to the number of degrees of freedom. S is another symbol for \chi^2 (the latter symbol is used e.g. in Numerical Recipes).

Terms of the C matrix are given as (p. 47 in the same book):

C_{jk}=\sum_{i=1}^n w_i \frac{\partial f}{\partial a_j} \frac{\partial f}{\partial a_k}

\sigma_{a_k} above is often called a standard error. Having standard errors, it is easy to calculate confidence intervals. Now another book will be cited: H. Motulsky and A. Christopoulos, Fitting Models to Biological Data Using Linear and Nonlinear Regression: A Practical Guide to Curve Fitting, Oxford University Press, 2004. This book can be downloaded for free as a manual to GraphPad Prism 4.

The standard errors reported by most nonlinear regression programs (...) are “approximate” or “asymptotic”. Accordingly, the confidence intervals computed using these errors should also be considered approximate.

It would be a mistake to assume that the “95% confidence intervals” reported by nonlinear regression have exactly a 95% chance of enclosing the true parameter values. The chance that the true value of the parameter is within the reported confidence interval may not be exactly 95%. Even so, the asymptotic confidence intervals will give you a good sense of how precisely you have determined the value of the parameter.

The calculations only work if nonlinear regression has converged on a sensible fit. If the regression converged on a false minimum, then the sum-of-squares as well as the parameter values will be wrong, so the reported standard error and confidence intervals won’t be helpful.

In Fityk:

  • info errors shows values of \sigma_{a_k}.
  • info confidence 95 shows confidence limits for confidence level 95% (any level can be choosen)
  • info cov shows the matrix C–1.
  • Individual symmetric errors of simple-variables can be accessed as $variable.error or e.g. %func.height.error.

In the GUI

select Fit ‣ Info from the menu to see uncertainties, confidence intervals and and the covariance matrix.

Note

In Fityk 0.9.0 and earlier info errors reported values of \sqrt{C_{kk}^{-1}}, which makes sense if the standard deviations of y‘s are set accurately. This formula is derived in Numerical Recipes.

Levenberg-Marquardt

This is a standard nonlinear least-squares routine, and involves computing the first derivatives of functions. For a description of the algorithm see Numerical Recipes, chapter 15.5 or Siegmund Brandt, Data Analysis, chapter 10.15. Essentially, it combines an inverse-Hessian method with a steepest descent method by introducing a λ factor. When λ is equal to 0, the method is equivalent to the inverse-Hessian method. When λ increases, the shift vector is rotated toward the direction of steepest descent and the length of the shift vector decreases. (The shift vector is a vector that is added to the parameter vector.) If a better fit is found on iteration, λ is decreased – it is divided by the value of lm_lambda_down_factor option (default: 10). Otherwise, λ is multiplied by the value of lm_lambda_up_factor (default: 10). The initial λ value is equal to lm_lambda_start (default: 0.0001).

The Marquardt method has two stopping criteria other than the common criteria.

  • If it happens twice in sequence, that the relative change of the value of the objective function (WSSR) is smaller than the value of the lm_stop_rel_change option, the fit is considered to have converged and is stopped.
  • If λ is greater than the value of the lm_max_lambda option (default: 10^15), usually when due to limited numerical precision WSSR is no longer changing, the fitting is also stopped.

Since version 1.1.2 it is possible to use another implementations of the Levenberg-Marquardt method, from MPFIT library. To switch between the two implementation use command:

set fitting_method = mpfit               # switch to MPFIT
set fitting_method = levenberg_marquardt # switch back to default one

Nelder-Mead Downhill Simplex

To quote chapter 4.8.3, p. 86 of Peter Gans, Data Fitting in the Chemical Sciences by the Method of Least Squares:

A simplex is a geometrical entity that has n+1 vertices corresponding to variations in n parameters. For two parameters the simplex is a triangle, for three parameters the simplex is a tetrahedron and so forth. The value of the objective function is calculated at each of the vertices. An iteration consists of the following process. Locate the vertex with the highest value of the objective function and replace this vertex by one lying on the line between it and the centroid of the other vertices. Four possible replacements can be considered, which I call contraction, short reflection, reflection and expansion.[...] It starts with an arbitrary simplex. Neither the shape nor position of this are critically important, except insofar as it may determine which one of a set of multiple minima will be reached. The simplex than expands and contracts as required in order to locate a valley if one exists. Then the size and shape of the simplex is adjusted so that progress may be made towards the minimum. Note particularly that if a pair of parameters are highly correlated, both will be simultaneously adjusted in about the correct proportion, as the shape of the simplex is adapted to the local contours.[...] Unfortunately it does not provide estimates of the parameter errors, etc. It is therefore to be recommended as a method for obtaining initial parameter estimates that can be used in the standard least squares method.

This method is also described in previously mentioned Numerical Recipes (chapter 10.4) and Data Analysis (chapter 10.8).

There are a few options for tuning this method. One of these is a stopping criterium nm_convergence. If the value of the expression 2(Mm)/(M+m), where M and m are the values of the worst and best vertices respectively (values of objective functions of vertices, to be precise!), is smaller then the value of nm_convergence option, fitting is stopped. In other words, fitting is stopped if all vertices are almost at the same level.

The remaining options are related to initialization of the simplex. Before starting iterations, we have to choose a set of points in space of the parameters, called vertices. Unless the option nm_move_all is set, one of these points will be the current point – values that parameters have at this moment. All but this one are drawn as follows: each parameter of each vertex is drawn separately. It is drawn from a distribution that has its center in the center of the domain of the parameter, and a width proportional to both width of the domain and value of the nm_move_factor parameter. Distribution shape can be set using the option nm_distribution as one of: uniform, gaussian, lorentzian and bound. The last one causes the value of the parameter to be either the greatest or smallest value in the domain of the parameter – one of the two bounds of the domain (assuming that nm_move_factor is equal 1).

Genetic Algorithms

[TODO]

All the Rest

Scripts

Scripts can be executed using the command:

exec filename

The file can be either a fityk script (usually with extension fit), or a Lua script (extension lua).

Note

Fityk can save its state to a script (info state > file.fit). It can also save all commands executed (directly or via GUI) in the session to a script (info history > file.fit).

Since a Fityk script with all the data inside can be a large file, the files may be stored compressed and it is possible to directly read gzip-compressed fityk script (.fit.gz).

Embedded Lua interpreter can execute any program in Lua 5.1. One-liners can be run with command lua:

=-> lua print(_VERSION)
Lua 5.1
=-> lua print(os.date("Today is %A."))
Today is Thursday.
=-> lua for n,f in F:all_functions() do print(n, f, f:get_template_name()) end
0       %_1     Constant
1       %_2     Cycle

(The Lua print function in fityk is redefined to show the output in the GUI instead of writing to stdout).

Like in the Lua interpreter, = at the beginning of line can be used to save some typing:

=-> = os.date("Today is %A.")
Today is Thursday.

Similarly, = after execute also interprets the rest of line as Lua expressions, but this time the results are not printed, they are executed as fityk commands:

=-> = string.format("fit %d", math.random(10,20))
fit 17
=-> exec= string.format("fit %d", math.random(10,20))
(runs from 10 to 20 iterations of fitting)

The Lua interpreter in Fityk has defined global object F which enables interaction with the program:

=-> = F:get_info("version")

Now the first example that can be useful. For each dataset write output of the info peaks command to a file named after the data file, with appended ”.out”:

=-> @*: exec= "info peaks >'"..F:get_info("filename")..".out'"

F is an instance of class Fityk in Lua wrapper. For now, the only documentation is in the fityk.h header.

Here is an example of Lua-Fityk interactions:

-- load data from files file01.dat, file02.dat, ... file13.dat
for i=1,13 do
    filename = string.format("file%02d.dat", i)
    F:execute("@+ < '" .. filename .. ":0:1::'")
end

-- print some statistics about loaded data
n = F:get_dataset_count()
print(n .. " datasets loaded.")

total_max_y = 0
for i=0,n-1 do
    max_y = F:calculate_expr("max(y)", i)
    if max_y > total_max_y then
        total_max_y = max_y
    end
end
print("The largest y: " .. total_max_y)

If a fityk command executed from Lua script fails, the whole script is stopped, unless you catch the error:

-- wrap F:execute() in pcall to handle possible errors
status, err = pcall(function() F:execute("fit") end)
if status == false then
    print("Error: " .. err)
end

Here is another example:

-- file foo.lua
prev_x = nil
for n = 0, F:get_dataset_count()-1 do
    local path = F:get_info("filename", n)
    local filename = string.match(path, "[^/\\]+$") or ""
    -- local x = F:calculate_expr("argmax(y)", n)
    local x = F:calculate_expr("F[0].center", n)
    s = string.format("%s: max at x=%.4f", filename, x)
    if prev_x ~= nil then
        s = s .. string.format("  (%+.4f)", x-prev_x)
    end
    prev_x = x
    print(s)
end

and its output:

=-> exec foo.lua
frame-000.dat: max at x=-0.0197
frame-001.dat: max at x=-0.0209  (-0.0012)
frame-002.dat: max at x=-0.0216  (-0.0007)
frame-003.dat: max at x=-0.0224  (-0.0008)

You may also see the hello.lua sample distributed with the program.

The Lua interpreter was added in ver. 1.0.3. If you have any questions about it, feel free to ask.

If you do prefer another programming language, Fityk library has C and C++ API, and comes with SWIG-based bindings for Python, Ruby, Perl and Java. Bindings to other languages supported by SWIG can be easily generated. The advantage of Lua is that it can interact with running fityk (GUI) program.

It is also possible to automate Fityk by preparing a stand-alone program that writes a valid fityk script to the standard output. To read and execute the output of such program use command:

exec ! program [args...]

Settings

The syntax is simple:

  • set option = value changes the option,
  • info set option shows the current value,
  • info set lists all available options.

In the GUI

the options can be set in a dialog (Session ‣ Settings).

The GUI configuration (colors, fonts, etc.) is changed in a different way (GUI ‣ ...) and is not covered here.

It is possible to change the value of the option temporarily:

with option1=value1 [,option2=value2]  command args...

For example:

info set fitting_method  # show the current fitting method
set fitting_method = nelder_mead_simplex # change the method
# change the method only for this one fit command
with fitting_method = levenberg_marquardt fit 10
# and now the default method is back Nelder-Mead

# multiple comma-separated options can be given
with fitting_method=levenberg_marquardt, verbosity=quiet fit 10

The list of available options:

autoplot
See autoplot.
cwd
Current working directory or empty string if it was not set explicitely. Affects relative paths.
default_sigma
Default y standard deviation. See Standard Deviation (or Weight). Possible values: sqrt max(y1/2, 1) and one (1).
domain_percent
See the section about variables.
epsilon
The ε value used to test floating-point numbers a and b for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): |a−b| < ε. Default value: 10-12. You may need to decrease it when working with very small numbers.
fit_replot
Refresh the plot when fitting (0/1).
fitting_method
See Fitting Related Commands.
function_cutoff
See description in the chapter about model.
height_correction
See Guessing Initial Parameters.
lm_*
Setting to tune the Levenberg-Marquardt fitting method.
log_full
Log output together with input (0/1).
logfile
String. File where the commands are logged. Empty – no logging.
max_fitting_time
Stop fitting when this number of seconds of processor time is exceeded. See Fitting Related Commands.
max_wssr_evaluations
See Fitting Related Commands.
nm_*
Setting to tune the Nelder-Mead downhill simplex fitting method.
numeric_format
Format of numbers printed by the info command. It takes as a value a format string, the same as sprintf() in the C language. For example set numeric_format='%.3f' changes the precision of numbers to 3 digits after the decimal point. Default value: %g.
on_error
Action performed on error. If the option is set to stop (default) and the error happens in script, the script is stopped. Other possible values are nothing (do nothing) and exit (finish program – ensures that no error can be overlooked).
pseudo_random_seed
Some fitting methods and functions, such as randnormal in data expressions use a pseudo-random number generator. In some situations one may want to have repeatable and predictable results of the fitting, e.g. to make a presentation. Seed for a new sequence of pseudo-random numbers can be set using the option pseudo_random_seed. If it is set to 0, the seed is based on the current time and a sequence of pseudo-random numbers is different each time.
refresh_period
During time-consuming computations (like fitting) user interface can remain not changed for this time (in seconds). This option was introduced, because on one hand frequent refreshing of the program’s window notably slows down fitting, and on the other hand irresponsive program is a frustrating experience.
verbosity
Possible values: -1 (silent), 0 (normal), 1 (verbose), 2 (very verbose).
width_correction
See Guessing Initial Parameters.

Data View

The command plot controls the region of the graph that is displayed:

plot [[xrange] yrange] [@n, ...]

xrange and yrange has syntax [min:max]. If the boundaries are skipped, they are automatically determined using the given datasets.

In the GUI

there is hardly ever a need to use this command directly.

The CLI version on Unix systems visualizes the data using the gnuplot program, which has similar syntax for the plot range.

Examples:

plot [20.4:50] [10:20] # show x from 20.4 to 50 and y from 10 to 20
plot [20.4:] # x from 20.4 to the end,
             # y range will be adjusted to encompass all data
plot         # all data will be shown

The values of the options autoplot and fit_replot change the automatic plotting behaviour. By default, the plot is refreshed automatically after changing the data or the model (autoplot=1). It is also possible to replot the model when fitting, to show the progress (see the options fit_replot and refresh_period).

Information Display

First, there is an option verbosity which sets the amount of messages displayed when executing commands.

There are three commands that print explicitely requested information:

  • info – used to show preformatted information
  • print – mainly used to output numbers (expression values)
  • debug – used for testing the program itself

The output of info and print can be redirected to a file:

info args > filename    # truncate the file
info args >> filename   # append to the file
info args > 'filename'  # the filename can (and sometimes must) be in quotes

The redirection can create a file, so there is also a command to delete it:

delete file filename

info

The following info arguments are recognized:

  • TypeName – definition
  • $variable_name – formula and value
  • %function_name – formula
  • F – the list of functions in F
  • Z – the list of functions in Z
  • compiler – options used when compiling the program
  • confidence level @n – confidence limits for given confidence level
  • cov @n – covariance matrix
  • data – number of points, data filename and title
  • dataset_count – number of datasets
  • errors @n – estimated uncertainties of parameters
  • filename – dataset filename
  • fit – goodness of fit
  • fit_history – info about recorded parameter sets
  • formula – full formula of the model
  • functions – the list of %functions
  • gnuplot_formula – full formula of the model, gnuplot style
  • guess – peak-detection and linear regression info
  • guess [from:to] – the same, but in the given range
  • history – the list of all the command issued in this session
  • history [m:n] – selected commands from the history
  • history_summary – the summary of command history
  • models – script that re-constructs all variables, functions and models
  • peaks – formatted list of parameters of functions in F.
  • peaks_err – the same as peaks + uncertainties
  • prop %function_name – parameters of the function
  • refs $variable_name – references to the variable
  • set – the list of settings
  • set option – the current value of the option
  • simplified_formula – simplified formula
  • simplified_gnuplot_formula – simplified formula, gnuplot style
  • state – generates a script that can reproduce the current state of the program. The scripts embeds all datasets.
  • title – dataset title
  • types – the list of function types
  • variables – the list of variables
  • version – version number
  • view – boundaries of the visualized rectangle

Both info state and info history can be used to restore the current session.

In the GUI

Session ‣ Save State and Session ‣ Save History.

print

The print command is followed by a comma-separated list of expressions and/or strings:

=-> p pi, pi^2, pi^3
3.14159 9.8696 31.0063
=-> with numeric_format='%.15f' print pi
3.141592653589793
=-> p '2+3 =', 2+3
2+3 = 5

The other valid arguments are filename and title. They are useful for listing the same values for multiple datasets, e.g.:

=-> @*: print filename, F[0].area, F[0].area.error

print can also print a list where each line corresponds to one data point, as described in the section Exporting Data.

As an exception, print expression > filename does not work if the filename is not enclosed in single quotes. That is because the parser interprets > as a part of the expression. Just use quotes (print 2+3 > 'tmp.dat').

debug

Only a few debug sub-commands are documented here:

  • der mathematic-function – shows derivatives:

    =-> debug der sin(a) + 3*exp(b/a)
    f(a, b) = sin(a)+3*exp(b/a)
    df / d a = cos(a)-3*exp(b/a)*b/a^2
    df / d b = 3*exp(b/a)/a
    
  • df x – compares the symbolic and numerical derivatives of F in x.

  • lex command – the list of tokens from the Fityk lexer

  • parse command – show the command as stored after parsing

  • expr expression – VM code from the expression

  • rd – derivatives for all variables

  • %function – bytecode, if available

  • $variable – derivatives

Other Commands

  • reset – reset the session
  • sleep sec – makes the program wait sec seconds.
  • quit – works as expected; if it is found in a script it quits the program, not only the script.
  • ! – commands that start with ! are passed (without the !) to the system() call (i.e. to the operating system).

Starting fityk and cfityk

On startup, the program runs a script from the $HOME/.fityk/init file (on MS Windows XP: C:\Documents and Settings\USERNAME\.fityk\init). Following this, the program executes command passed with the --cmd option, if given, and processes command line arguments:

  • if the argument starts with =->, the string following =-> is regarded as a command and executed (otherwise, it is regarded as a filename),
  • if the filename has extension ”.fit” or the file begins with a “# Fityk” string, it is assumed to be a script and is executed,
  • otherwise, it is assumed to be a data file; columns and data blocks can be specified in the normal way, see Loading Data.

There are also other parameters to the CLI and GUI versions of the program. Option “-h” (“/h” on MS Windows) gives the full listing:

wojdyr@ubu:~/fityk/src$ ./fityk -h
Usage: fityk \[-h] \[-V] \[-c <str>] \[-I] \[-r] \[script or data file...]
-h, --help            show this help message
-V, --version         output version information and exit
-c, --cmd=<str>       script passed in as string
-g, --config=<str>    choose GUI configuration
-I, --no-init         don't process $HOME/.fityk/init file
-r, --reorder         reorder data (50.xy before 100.xy)


wojdyr@ubu:~/foo$ cfityk -h
Usage: cfityk \[-h] \[-V] \[-c <str>] \[script or data file...]
-h, --help            show this help message
-V, --version         output version information and exit
-c, --cmd=<str>       script passed in as string
-I, --no-init         don't process $HOME/.fityk/init file
-q, --quit            don't enter interactive shell

The example of non-interactive using CLI version on Linux:

wojdyr@ubu:~/foo$ ls *.rdf
dat_a.rdf  dat_r.rdf  out.rdf
wojdyr@ubu:~/foo$ cfityk -q -I "=-> set verbosity=-1, autoplot=0" \
> *.rdf "=-> @*: print min(x if y > 0)"
in @0 dat_a: 1.8875
in @1 dat_r: 1.5105
in @2 out: 1.8305
PKF:/Z$fityk-v1.2.1/.doctrees/model.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xguessing initial parametersqNXcutoffqNXnumerical recipesqXfunction types and functionsq NX model_formulaq Xvariadic functionsq NXmodelsq NX variablesq XdomainqXhereqXflistqXuser-defined functions (udf)qNXudfqXmodel, f and zqNXmodelqXguessqXbuilt-in functionsqNXdisplaying informationqNXfunction_cutoffquUsubstitution_defsq}q(X copyfunc-iconqcdocutils.nodes substitution_definition q)q}q(U rawsourceqXU.. |copyfunc-icon| image:: img/copyfunc_icon.png :alt: Copy-Model :class: icon Uparentq cdocutils.nodes section q!)q"}q#(hUh h!)q$}q%(hUh hUsourceq&X;/var/build/user_builds/fityk/checkouts/v1.2.1/doc/model.rstq'Uexpect_referenced_by_nameq(}q)hcdocutils.nodes target q*)q+}q,(hX .. _model:h hh&h'Utagnameq-Utargetq.U attributesq/}q0(Uidsq1]Ubackrefsq2]Udupnamesq3]Uclassesq4]Unamesq5]Urefidq6Umodelq7uUlineq8KUdocumentq9hUchildrenq:]ubsh-Usectionq;h/}q<(h3]h4]h2]h1]q=(Umodelsq>h7eh5]q?(h heuh8Kh9hUexpect_referenced_by_idq@}qAh7h+sh:]qB(cdocutils.nodes title qC)qD}qE(hXModelsqFh h$h&h'h-UtitleqGh/}qH(h3]h4]h2]h1]h5]uh8Kh9hh:]qIcdocutils.nodes Text qJXModelsqKqL}qM(hhFh hDubaubcdocutils.nodes paragraph qN)qO}qP(hXOFrom `Numerical Recipes `_, chapter 15.0:h h$h&h'h-U paragraphqQh/}qR(h3]h4]h2]h1]h5]uh8Kh9hh:]qS(hJXFrom qTqU}qV(hXFrom h hOubcdocutils.nodes reference qW)qX}qY(hX;`Numerical Recipes `_h/}qZ(UnameXNumerical RecipesUrefuriq[X$http://www.nrbook.com/a/bookcpdf.phpq\h1]h2]h3]h4]h5]uh hOh:]q]hJXNumerical Recipesq^q_}q`(hUh hXubah-U referenceqaubh*)qb}qc(hX' U referencedqdKh hOh-h.h/}qe(Urefurih\h1]qfUnumerical-recipesqgah2]h3]h4]h5]qhhauh:]ubhJX, chapter 15.0:qiqj}qk(hX, chapter 15.0:h hOubeubcdocutils.nodes block_quote ql)qm}qn(hUh h$h&h'h-U block_quoteqoh/}qp(h3]h4]h2]h1]h5]uh8Nh9hh:]qqhN)qr}qs(hXGiven a set of observations, one often wants to condense and summarize the data by fitting it to a "model" that depends on adjustable parameters. Sometimes the model is simply a convenient class of functions, such as polynomials or Gaussians, and the fit supplies the appropriate coefficients. Other times, the model's parameters come from some underlying theory that the data are supposed to satisfy; examples are coefficients of rate equations in a complex network of chemical reactions, or orbital elements of a binary star. Modeling can also be used as a kind of constrained interpolation, where you want to extend a few data points into a continuous function, but with some underlying idea of what that function should look like.qth hmh&h'h-hQh/}qu(h3]h4]h2]h1]h5]uh8K h:]qvhJXGiven a set of observations, one often wants to condense and summarize the data by fitting it to a "model" that depends on adjustable parameters. Sometimes the model is simply a convenient class of functions, such as polynomials or Gaussians, and the fit supplies the appropriate coefficients. Other times, the model's parameters come from some underlying theory that the data are supposed to satisfy; examples are coefficients of rate equations in a complex network of chemical reactions, or orbital elements of a binary star. Modeling can also be used as a kind of constrained interpolation, where you want to extend a few data points into a continuous function, but with some underlying idea of what that function should look like.qwqx}qy(hhth hrubaubaubhN)qz}q{(hX.This chapter shows how to construct the model.q|h h$h&h'h-hQh/}q}(h3]h4]h2]h1]h5]uh8Kh9hh:]q~hJX.This chapter shows how to construct the model.qq}q(hh|h hzubaubhN)q}q(hXComplex models are often a sum of many functions. That is why in Fityk the model *F* is constructed as a list of component functions and is computed as :math:`F = \sum_i f_i`.h h$h&h'h-hQh/}q(h3]h4]h2]h1]h5]uh8Kh9hh:]q(hJXQComplex models are often a sum of many functions. That is why in Fityk the model qq}q(hXQComplex models are often a sum of many functions. That is why in Fityk the model h hubcdocutils.nodes emphasis q)q}q(hX*F*h/}q(h3]h4]h2]h1]h5]uh hh:]qhJXFq}q(hUh hubah-UemphasisqubhJXD is constructed as a list of component functions and is computed as qq}q(hXD is constructed as a list of component functions and is computed as h hubcsphinx.ext.mathbase math q)q}q(hUh/}q(UlatexXF = \sum_i f_ih1]h2]h3]h4]h5]uh hh:]h-UmathqubhJX.q}q(hX.h hubeubhN)q}q(hXEach component function :math:`f_i` is one of predefined functions, such as Gaussian or polynomial. This is not a limitation, because the user can add any function to the predefined functions.h h$h&h'h-hQh/}q(h3]h4]h2]h1]h5]uh8Kh9hh:]q(hJXEach component function qq}q(hXEach component function h hubh)q}q(hUh/}q(UlatexXf_ih1]h2]h3]h4]h5]uh hh:]h-hubhJX is one of predefined functions, such as Gaussian or polynomial. This is not a limitation, because the user can add any function to the predefined functions.qq}q(hX is one of predefined functions, such as Gaussian or polynomial. This is not a limitation, because the user can add any function to the predefined functions.h hubeubhN)q}q(hXTo avoid confusion, the name *function* will be used only when referring to a component function, not when when referring to the sum (model), which mathematically is also a function. The predefined functions will be sometimes called *function types*.h h$h&h'h-hQh/}q(h3]h4]h2]h1]h5]uh8K h9hh:]q(hJXTo avoid confusion, the name qq}q(hXTo avoid confusion, the name h hubh)q}q(hX *function*h/}q(h3]h4]h2]h1]h5]uh hh:]qhJXfunctionqq}q(hUh hubah-hubhJX will be used only when referring to a component function, not when when referring to the sum (model), which mathematically is also a function. The predefined functions will be sometimes called qq}q(hX will be used only when referring to a component function, not when when referring to the sum (model), which mathematically is also a function. The predefined functions will be sometimes called h hubh)q}q(hX*function types*h/}q(h3]h4]h2]h1]h5]uh hh:]qhJXfunction typesqq}q(hUh hubah-hubhJX.q}q(hX.h hubeubhN)q}q(hXFunction :math:`f_i=f_i(x; \boldsymbol{a})` is a function of *x*, and depends on a vector of parameters :math:`\boldsymbol{a}`. The parameters :math:`\boldsymbol{a}` will be fitted to achieve agreement of the model and data.h h$h&h'h-hQh/}q(h3]h4]h2]h1]h5]uh8K%h9hh:]q(hJX Function qƅq}q(hX Function h hubh)q}q(hUh/}q(UlatexXf_i=f_i(x; \boldsymbol{a})h1]h2]h3]h4]h5]uh hh:]h-hubhJX is a function of q̅q}q(hX is a function of h hubh)q}q(hX*x*h/}q(h3]h4]h2]h1]h5]uh hh:]qhJXxq}q(hUh hubah-hubhJX(, and depends on a vector of parameters qՅq}q(hX(, and depends on a vector of parameters h hubh)q}q(hUh/}q(UlatexX\boldsymbol{a}h1]h2]h3]h4]h5]uh hh:]h-hubhJX. The parameters qۅq}q(hX. The parameters h hubh)q}q(hUh/}q(UlatexX\boldsymbol{a}h1]h2]h3]h4]h5]uh hh:]h-hubhJX; will be fitted to achieve agreement of the model and data.qᅁq}q(hX; will be fitted to achieve agreement of the model and data.h hubeubhN)q}q(hXIn experiments we often have the situation that the measured *x* values are subject to systematic errors caused, for example, by instrumental zero shift or, in powder diffraction measurements, by displacement of sample in the instrument. If this is the case, such errors should be a part of the model. In Fityk, this part of the model is called :dfn:`x-correction`. The final formula for the model is:h h$h&h'h-hQh/}q(h3]h4]h2]h1]h5]uh8K*h9hh:]q(hJX=In experiments we often have the situation that the measured q腁q}q(hX=In experiments we often have the situation that the measured h hubh)q}q(hX*x*h/}q(h3]h4]h2]h1]h5]uh hh:]qhJXxq}q(hUh hubah-hubhJX values are subject to systematic errors caused, for example, by instrumental zero shift or, in powder diffraction measurements, by displacement of sample in the instrument. If this is the case, such errors should be a part of the model. In Fityk, this part of the model is called qq}q(hX values are subject to systematic errors caused, for example, by instrumental zero shift or, in powder diffraction measurements, by displacement of sample in the instrument. If this is the case, such errors should be a part of the model. In Fityk, this part of the model is called h hubh)q}q(hX:dfn:`x-correction`h/}q(h3]h4]qUdfnqah2]h1]h5]uh hh:]qhJX x-correctionqq}q(hUh hubah-hubhJX%. The final formula for the model is:qq}q(hX%. The final formula for the model is:h hubeubh*)r}r(hX.. _model_formula:h h$h&h'h-h.h/}r(h1]h2]h3]h4]h5]h6U model-formularuh8K2h9hh:]ubcsphinx.ext.mathbase displaymath r)r}r(hUh h$h&h'h(}rh jsh-U displaymathrh/}r (Ulatexr XKF(x; \boldsymbol{a}) = \sum_i f_i(x+Z(x; \boldsymbol{a}); \boldsymbol{a}) Unowrapr h1]r jah2]h3]h4]h5]r h aUdocnamerXmodelrUlabelrNuh8K4h9hh@}rjjsh:]ubhN)r}r(hXwhere :math:`Z(x; \boldsymbol{a}) = \sum_i z_i(x; \boldsymbol{a})` is the *x*-correction. *Z* is constructed as a list of components, analogously to *F*, although in practice it has rarely more than one component.h h$h&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8K7h9hh:]r(hJXwhere rr}r(hXwhere h jubh)r}r(hUh/}r(UlatexX4Z(x; \boldsymbol{a}) = \sum_i z_i(x; \boldsymbol{a})h1]h2]h3]h4]h5]uh jh:]h-hubhJX is the rr}r(hX is the h jubh)r}r (hX*x*h/}r!(h3]h4]h2]h1]h5]uh jh:]r"hJXxr#}r$(hUh jubah-hubhJX -correction. r%r&}r'(hX -correction. h jubh)r(}r)(hX*Z*h/}r*(h3]h4]h2]h1]h5]uh jh:]r+hJXZr,}r-(hUh j(ubah-hubhJX8 is constructed as a list of components, analogously to r.r/}r0(hX8 is constructed as a list of components, analogously to h jubh)r1}r2(hX*F*h/}r3(h3]h4]h2]h1]h5]uh jh:]r4hJXFr5}r6(hUh j1ubah-hubhJX=, although in practice it has rarely more than one component.r7r8}r9(hX=, although in practice it has rarely more than one component.h jubeubhN)r:}r;(hXEach component function is created by specifying a function type and binding *variables* to type's parameters. The next section explains what are *variables* in Fityk, and then we get back to functions.h h$h&h'h-hQh/}r<(h3]h4]h2]h1]h5]uh8Kr?}r@(hXMEach component function is created by specifying a function type and binding h j:ubh)rA}rB(hX *variables*h/}rC(h3]h4]h2]h1]h5]uh j:h:]rDhJX variablesrErF}rG(hUh jAubah-hubhJX: to type's parameters. The next section explains what are rHrI}rJ(hX: to type's parameters. The next section explains what are h j:ubh)rK}rL(hX *variables*h/}rM(h3]h4]h2]h1]h5]uh j:h:]rNhJX variablesrOrP}rQ(hUh jKubah-hubhJX- in Fityk, and then we get back to functions.rRrS}rT(hX- in Fityk, and then we get back to functions.h j:ubeubh*)rU}rV(hX.. _variables:h h$h&h'h-h.h/}rW(h1]h2]h3]h4]h5]h6U variablesrXuh8K@h9hh:]ubh!)rY}rZ(hUhdKh h$h&h'h(}r[h jUsh-h;h/}r\(h3]r]X variablesr^ah4]h2]h1]r_(jXUid1r`eh5]rah auh8KCh9hh@}rbjXjUsh:]rc(hC)rd}re(hX Variablesrfh jYh&h'h-hGh/}rg(h3]h4]h2]h1]h5]uh8KCh9hh:]rhhJX Variablesrirj}rk(hjfh jdubaubhN)rl}rm(hX_Variables have names prefixed with the dollar symbol ($) and are created by assigning a value::h jYh&h'h-hQh/}rn(h3]h4]h2]h1]h5]uh8KEh9hh:]rohJX^Variables have names prefixed with the dollar symbol ($) and are created by assigning a value:rprq}rr(hX^Variables have names prefixed with the dollar symbol ($) and are created by assigning a value:h jlubaubcdocutils.nodes literal_block rs)rt}ru(hX$foo=~5.3 # simple-variable $bar=5*sin($foo) # compound-variable $c=3.1 # constant (the simplest compound-variable)h jYh&h'h-U literal_blockrvh/}rw(U xml:spacerxUpreserveryh1]h2]h3]h4]h5]uh8KHh9hh:]rzhJX$foo=~5.3 # simple-variable $bar=5*sin($foo) # compound-variable $c=3.1 # constant (the simplest compound-variable)r{r|}r}(hUh jtubaubhN)r~}r(hXThe numbers prefixed with the tilde (~) are adjustable when the model is fitted to the data. Variable created by assigning ``~``\ *number* (like ``$foo`` in the example above) will be called a :dfn:`simple-variable`.h jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8KLh9hh:]r(hJX{The numbers prefixed with the tilde (~) are adjustable when the model is fitted to the data. Variable created by assigning rr}r(hX{The numbers prefixed with the tilde (~) are adjustable when the model is fitted to the data. Variable created by assigning h j~ubcdocutils.nodes literal r)r}r(hX``~``h/}r(h3]h4]h2]h1]h5]uh j~h:]rhJX~r}r(hUh jubah-UliteralrubhJXr}r(hX\ h j~ubh)r}r(hX*number*h/}r(h3]h4]h2]h1]h5]uh j~h:]rhJXnumberrr}r(hUh jubah-hubhJX (like rr}r(hX (like h j~ubj)r}r(hX``$foo``h/}r(h3]h4]h2]h1]h5]uh j~h:]rhJX$foorr}r(hUh jubah-jubhJX( in the example above) will be called a rr}r(hX( in the example above) will be called a h j~ubh)r}r(hX:dfn:`simple-variable`h/}r(h3]h4]rhah2]h1]h5]uh j~h:]rhJXsimple-variablerr}r(hUh jubah-hubhJX.r}r(hX.h j~ubeubhN)r}r(hXAll other variables are called :dfn:`compound-variables`. Compound variables either depend on other variables (``$bar`` above) or are constant (``$c``).h jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8KRh9hh:]r(hJXAll other variables are called rr}r(hXAll other variables are called h jubh)r}r(hX:dfn:`compound-variables`h/}r(h3]h4]rhah2]h1]h5]uh jh:]rhJXcompound-variablesrr}r(hUh jubah-hubhJX7. Compound variables either depend on other variables (rr}r(hX7. Compound variables either depend on other variables (h jubj)r}r(hX``$bar``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX$barrr}r(hUh jubah-jubhJX above) or are constant (rr}r(hX above) or are constant (h jubj)r}r(hX``$c``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX$crr}r(hUh jubah-jubhJX).rr}r(hX).h jubeubcdocutils.nodes important r)r}r(hX Unlike in popular programming languages, variable can store either a single numeric (floating-point) value or a mathematical expression. Nothing else. In case of expression, if we define ``$b=2*$a`` the value of ``$b`` will be recalculated every time ``$a`` changes.h jYh&h'h-U importantrh/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]rhN)r}r(hX Unlike in popular programming languages, variable can store either a single numeric (floating-point) value or a mathematical expression. Nothing else. In case of expression, if we define ``$b=2*$a`` the value of ``$b`` will be recalculated every time ``$a`` changes.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8KXh:]r(hJXUnlike in popular programming languages, variable can store either a single numeric (floating-point) value or a mathematical expression. Nothing else. In case of expression, if we define rr}r(hXUnlike in popular programming languages, variable can store either a single numeric (floating-point) value or a mathematical expression. Nothing else. In case of expression, if we define h jubj)r}r(hX ``$b=2*$a``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX$b=2*$arr}r(hUh jubah-jubhJX the value of rr}r(hX the value of h jubj)r}r(hX``$b``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX$brr}r(hUh jubah-jubhJX! will be recalculated every time rr}r(hX! will be recalculated every time h jubj)r}r(hX``$a``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX$arr}r(hUh jubah-jubhJX changes.rr}r(hX changes.h jubeubaubhN)r}r(hXTo assign a value (constant) of another variable, use: ``$b={$a}``. Braces return the current value of the enclosed expression. The left brace can be preceded by the tilde (``~``). The assignment ``$b=~{$a}`` creates a simple variable.h jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8K]h9hh:]r(hJX7To assign a value (constant) of another variable, use: rr}r(hX7To assign a value (constant) of another variable, use: h jubj)r}r(hX ``$b={$a}``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX$b={$a}r r }r (hUh jubah-jubhJXk. Braces return the current value of the enclosed expression. The left brace can be preceded by the tilde (r r }r(hXk. Braces return the current value of the enclosed expression. The left brace can be preceded by the tilde (h jubj)r}r(hX``~``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX~r}r(hUh jubah-jubhJX). The assignment rr}r(hX). The assignment h jubj)r}r(hX ``$b=~{$a}``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX$b=~{$a}rr}r(hUh jubah-jubhJX creates a simple variable.rr }r!(hX creates a simple variable.h jubeubhN)r"}r#(hXSCompound-variables can be build using operators +, -, \*, /, ^ and the functions ``sqrt``, ``exp``, ``log10``, ``ln``, ``sin``, ``cos``, ``tan``, ``sinh``, ``cosh``, ``tanh``, ``atan``, ``asin``, ``acos``, ``erf``, ``erfc``, ``lgamma``, ``abs``, ``voigt``. This is a subset of the functions used in :ref:`data transformations `.h jYh&h'h-hQh/}r$(h3]h4]h2]h1]h5]uh8Kbh9hh:]r%(hJXPCompound-variables can be build using operators +, -, *, /, ^ and the functions r&r'}r((hXQCompound-variables can be build using operators +, -, \*, /, ^ and the functions h j"ubj)r)}r*(hX``sqrt``h/}r+(h3]h4]h2]h1]h5]uh j"h:]r,hJXsqrtr-r.}r/(hUh j)ubah-jubhJX, r0r1}r2(hX, h j"ubj)r3}r4(hX``exp``h/}r5(h3]h4]h2]h1]h5]uh j"h:]r6hJXexpr7r8}r9(hUh j3ubah-jubhJX, r:r;}r<(hX, h j"ubj)r=}r>(hX ``log10``h/}r?(h3]h4]h2]h1]h5]uh j"h:]r@hJXlog10rArB}rC(hUh j=ubah-jubhJX, rDrE}rF(hX, h j"ubj)rG}rH(hX``ln``h/}rI(h3]h4]h2]h1]h5]uh j"h:]rJhJXlnrKrL}rM(hUh jGubah-jubhJX, rNrO}rP(hX, h j"ubj)rQ}rR(hX``sin``h/}rS(h3]h4]h2]h1]h5]uh j"h:]rThJXsinrUrV}rW(hUh jQubah-jubhJX, rXrY}rZ(hX, h j"ubj)r[}r\(hX``cos``h/}r](h3]h4]h2]h1]h5]uh j"h:]r^hJXcosr_r`}ra(hUh j[ubah-jubhJX, rbrc}rd(hX, h j"ubj)re}rf(hX``tan``h/}rg(h3]h4]h2]h1]h5]uh j"h:]rhhJXtanrirj}rk(hUh jeubah-jubhJX, rlrm}rn(hX, h j"ubj)ro}rp(hX``sinh``h/}rq(h3]h4]h2]h1]h5]uh j"h:]rrhJXsinhrsrt}ru(hUh joubah-jubhJX, rvrw}rx(hX, h j"ubj)ry}rz(hX``cosh``h/}r{(h3]h4]h2]h1]h5]uh j"h:]r|hJXcoshr}r~}r(hUh jyubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX``tanh``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXtanhrr}r(hUh jubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX``atan``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXatanrr}r(hUh jubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX``asin``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXasinrr}r(hUh jubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX``acos``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXacosrr}r(hUh jubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX``erf``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXerfrr}r(hUh jubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX``erfc``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXerfcrr}r(hUh jubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX ``lgamma``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXlgammarr}r(hUh jubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX``abs``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXabsrr}r(hUh jubah-jubhJX, rr}r(hX, h j"ubj)r}r(hX ``voigt``h/}r(h3]h4]h2]h1]h5]uh j"h:]rhJXvoigtrr}r(hUh jubah-jubhJX,. This is a subset of the functions used in rr}r(hX,. This is a subset of the functions used in h j"ubcsphinx.addnodes pending_xref r)r}r(hX':ref:`data transformations `rh j"h&h'h-U pending_xrefrh/}r(UreftypeXrefUrefwarnrU reftargetrX transformU refdomainXstdrh1]h2]U refexplicith3]h4]h5]Urefdocrjuh8Kbh:]rcdocutils.nodes inline r)r}r(hjh/}r(h3]h4]r(UxrefrjXstd-refreh2]h1]h5]uh jh:]rhJXdata transformationsrr}r(hUh jubah-UinlinerubaubhJX.r}r(hX.h j"ubeubhN)r}r(hX,The braces may contain any data expression::rh jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kyh9hh:]rhJX+The braces may contain any data expression:rr}r(hX+The braces may contain any data expression:h jubaubjs)r}r(hXT$x0 = {x[0]} $min_y = {min(y if a)} $c = {max2($a, $b)} $t = {max(x) < 78 ? $a : $b}h jYh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8K{h9hh:]rhJXT$x0 = {x[0]} $min_y = {min(y if a)} $c = {max2($a, $b)} $t = {max(x) < 78 ? $a : $b}rr}r(hUh jubaubhN)r}r(hX]Sometimes it is useful to freeze a variable, i.e. to prevent it from changing while fitting::h jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJX\Sometimes it is useful to freeze a variable, i.e. to prevent it from changing while fitting:r r }r (hX\Sometimes it is useful to freeze a variable, i.e. to prevent it from changing while fitting:h jubaubjs)r }r (hX$a = ~12.3 # $a is fittable (simple-variable) $a = {$a} # $a is not fittable (constant) $a = ~{$a} # $a is fittable (simple-variable) againh jYh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]rhJX$a = ~12.3 # $a is fittable (simple-variable) $a = {$a} # $a is not fittable (constant) $a = ~{$a} # $a is fittable (simple-variable) againrr}r(hUh j ubaubcdocutils.nodes admonition r)r}r(hXa variable can be switched between constant and simple-variable by clicking the padlock button on the sidebar. The icons |open-lock-icon| and |lock-icon| show that the variable is fittable and frozen, respectively.h jYh&h'h-U admonitionrh/}r(h3]h4]rUadmonition-in-the-guirah2]h1]h5]uh8Nh9hh:]r(hC)r}r(hX In the GUIrh jh&h'h-hGh/}r(h3]h4]h2]h1]h5]uh8Kh:]rhJX In the GUIr r!}r"(hjh jubaubhN)r#}r$(hXa variable can be switched between constant and simple-variable by clicking the padlock button on the sidebar. The icons |open-lock-icon| and |lock-icon| show that the variable is fittable and frozen, respectively.h jh&h'h-hQh/}r%(h3]h4]h2]h1]h5]uh8Kh:]r&(hJXya variable can be switched between constant and simple-variable by clicking the padlock button on the sidebar. The icons r'r(}r)(hXya variable can be switched between constant and simple-variable by clicking the padlock button on the sidebar. The icons h j#ubcdocutils.nodes image r*)r+}r,(hX1image:: img/open_lock_icon.png :alt: open lockr-h/}r.(UuriXimg/open_lock_icon.pngr/h1]h2]h3]h4]U candidatesr0}r1U*j/sh5]Ualtcdocutils.nodes reprunicode r2X open lockr3r4}r5buh j#h:]h-Uimager6ubhJX and r7r8}r9(hX and h j#ubj*)r:}r;(hX'image:: img/lock_icon.png :alt: lockr<h/}r=(UuriXimg/lock_icon.pngr>h1]h2]h3]h4]j0}r?U*j>sh5]Ualtj2Xlockr@rA}rBbuh j#h:]h-j6ubhJX= show that the variable is fittable and frozen, respectively.rCrD}rE(hX= show that the variable is fittable and frozen, respectively.h j#ubeubeubh)rF}rG(hXF.. |open-lock-icon| image:: img/open_lock_icon.png :alt: open lock h jYh&h'h-Usubstitution_definitionrHh/}rI(h3]h4]h2]h1]h5]rJXopen-lock-iconrKauh8Kh9hh:]rLj*)rM}rN(hj-h/}rO(Uurij/h1]h2]h3]h4]j0}rPU*j/sh5]Ualtj4uh jFh:]h-j6ubaubh)rQ}rR(hX8.. |lock-icon| image:: img/lock_icon.png :alt: lock h jYh&h'h-jHh/}rS(h3]h4]h2]h1]h5]rTX lock-iconrUauh8Kh9hh:]rVj*)rW}rX(hj<h/}rY(Uurij>h1]h2]h3]h4]j0}rZU*j>sh5]UaltjAuh jQh:]h-j6ubaubhN)r[}r\(hX,If the assigned expression contains tildes::r]h jYh&h'h-hQh/}r^(h3]h4]h2]h1]h5]uh8Kh9hh:]r_hJX+If the assigned expression contains tildes:r`ra}rb(hX+If the assigned expression contains tildes:h j[ubaubjs)rc}rd(hX$bleh=~9.1*exp(~2)h jYh&h'h-jvh/}re(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]rfhJX$bleh=~9.1*exp(~2)rgrh}ri(hUh jcubaubhN)rj}rk(hXit automatically creates simple-variables corresponding to the tilde-prefixed numbers. In the example above two simple-variables (with values 9.1 and 2) are created. Automatically created variables are named ``$_1``, ``$_2``, ``$_3``, and so on.h jYh&h'h-hQh/}rl(h3]h4]h2]h1]h5]uh8Kh9hh:]rm(hJXit automatically creates simple-variables corresponding to the tilde-prefixed numbers. In the example above two simple-variables (with values 9.1 and 2) are created. Automatically created variables are named rnro}rp(hXit automatically creates simple-variables corresponding to the tilde-prefixed numbers. In the example above two simple-variables (with values 9.1 and 2) are created. Automatically created variables are named h jjubj)rq}rr(hX``$_1``h/}rs(h3]h4]h2]h1]h5]uh jjh:]rthJX$_1rurv}rw(hUh jqubah-jubhJX, rxry}rz(hX, h jjubj)r{}r|(hX``$_2``h/}r}(h3]h4]h2]h1]h5]uh jjh:]r~hJX$_2rr}r(hUh j{ubah-jubhJX, rr}r(hX, h jjubj)r}r(hX``$_3``h/}r(h3]h4]h2]h1]h5]uh jjh:]rhJX$_3rr}r(hUh jubah-jubhJX , and so on.rr}r(hX , and so on.h jjubeubhN)r}r(hX,Variables can be deleted using the command::rh jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJX+Variables can be deleted using the command:rr}r(hX+Variables can be deleted using the command:h jubaubjs)r}r(hXdelete $variableh jYh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]rhJXdelete $variablerr}r(hUh jubaubh*)r}r(hX .. _domain:h jYh&h'h-h.h/}r(h1]h2]h3]h4]h5]h6Udomainruh8Kh9hh:]ubhN)r}r(hXiSome fitting algorithms randomize the parameters of the model (i.e. they randomize simple variables). To effectively use such algorithms, the user should specify a :dfn:`domain` for each simple-variable, i.e. the minimum and maximum value. The domain does not imply any constraints on the value the variable can have -- it is only a hint for fitting algorithms.h jYh&h'h(}rhjsh-hQh/}r(h3]h4]h2]h1]rjah5]rhauh8Kh9hh@}rjjsh:]r(hJXSome fitting algorithms randomize the parameters of the model (i.e. they randomize simple variables). To effectively use such algorithms, the user should specify a rr}r(hXSome fitting algorithms randomize the parameters of the model (i.e. they randomize simple variables). To effectively use such algorithms, the user should specify a h jubh)r}r(hX :dfn:`domain`h/}r(h3]h4]rhah2]h1]h5]uh jh:]rhJXdomainrr}r(hUh jubah-hubhJX for each simple-variable, i.e. the minimum and maximum value. The domain does not imply any constraints on the value the variable can have -- it is only a hint for fitting algorithms.rr}r(hX for each simple-variable, i.e. the minimum and maximum value. The domain does not imply any constraints on the value the variable can have -- it is only a hint for fitting algorithms.h jubeubhN)r}r(hXjThe default algorithm (Lev-Mar) does not need it, so in most cases you do not need to worry about domains.rh jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJXjThe default algorithm (Lev-Mar) does not need it, so in most cases you do not need to worry about domains.rr}r(hjh jubaubhN)r}r(hX]Domains are used by the Nelder-Mead method and Genetic Algorithms. The syntax is as follows::h jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJX\Domains are used by the Nelder-Mead method and Genetic Algorithms. The syntax is as follows:rr}r(hX\Domains are used by the Nelder-Mead method and Genetic Algorithms. The syntax is as follows:h jubaubjs)r}r(hXC$a = ~12.3 [0:20] # initial values are drawn from the (0, 20) rangeh jYh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]rhJXC$a = ~12.3 [0:20] # initial values are drawn from the (0, 20) rangerr}r(hUh jubaubhN)r}r(hXIf the domain is not specified, the default domain is used, which is ±\ *p*\ % of the current value, where *p* can be set using the :option:`domain_percent` option.h jYh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJXGIf the domain is not specified, the default domain is used, which is ±rr}r(hXIIf the domain is not specified, the default domain is used, which is ±\ h jubh)r}r(hX*p*h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXpr}r(hUh jubah-hubhJX% of the current value, where rr}r(hX \ % of the current value, where h jubh)r}r(hX*p*h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXpr}r(hUh jubah-hubhJX can be set using the rr}r(hX can be set using the h jubj)r}r(hX:option:`domain_percent`rh jh&h'h-jh/}r(UreftypeXoptionjjXdomain_percentU refdomainXstdrh1]h2]U refexplicith3]h4]h5]jjU std:programrNuh8Kh:]rj)r}r(hjh/}r(h3]h4]r(jjX std-optionreh2]h1]h5]uh jh:]rhJXdomain_percentrr}r(hUh jubah-jubaubhJX option.rr}r(hX option.h jubeubeubh!)r}r(hUh h$h&h'h-h;h/}r(h3]h4]h2]h1]rUfunction-types-and-functionsrah5]rh auh8Kh9hh:]r(hC)r}r(hXFunction Types and Functionsrh jh&h'h-hGh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJXFunction Types and Functionsrr}r(hjh jubaubhN)r }r (hXZFunction types have names that start with upper case letter, e.g. ``Linear`` or ``Voigt``.h jh&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Kh9hh:]r (hJXBFunction types have names that start with upper case letter, e.g. r r}r(hXBFunction types have names that start with upper case letter, e.g. h j ubj)r}r(hX ``Linear``h/}r(h3]h4]h2]h1]h5]uh j h:]rhJXLinearrr}r(hUh jubah-jubhJX or rr}r(hX or h j ubj)r}r(hX ``Voigt``h/}r(h3]h4]h2]h1]h5]uh j h:]rhJXVoigtrr}r (hUh jubah-jubhJX.r!}r"(hX.h j ubeubhN)r#}r$(hXFunctions have names prefixed with the percent symbol, e.g. ``%func``. Every function has a type and variables bound to its parameters.h jh&h'h-hQh/}r%(h3]h4]h2]h1]h5]uh8Kh9hh:]r&(hJX<Functions have names prefixed with the percent symbol, e.g. r'r(}r)(hX<Functions have names prefixed with the percent symbol, e.g. h j#ubj)r*}r+(hX ``%func``h/}r,(h3]h4]h2]h1]h5]uh j#h:]r-hJX%funcr.r/}r0(hUh j*ubah-jubhJXB. Every function has a type and variables bound to its parameters.r1r2}r3(hXB. Every function has a type and variables bound to its parameters.h j#ubeubhN)r4}r5(hXcFunctions can be created by giving the type and the correct number of variables in brackets, e.g.::h jh&h'h-hQh/}r6(h3]h4]h2]h1]h5]uh8Kh9hh:]r7hJXbFunctions can be created by giving the type and the correct number of variables in brackets, e.g.:r8r9}r:(hXbFunctions can be created by giving the type and the correct number of variables in brackets, e.g.:h j4ubaubjs)r;}r<(hX%f1 = Gaussian(~66254., ~24.7, ~0.264) %f2 = Gaussian(~6e4, $ctr, $b+$c) %f3 = Gaussian(height=~66254., hwhm=~0.264, center=~24.7)h jh&h'h-jvh/}r=(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]r>hJX%f1 = Gaussian(~66254., ~24.7, ~0.264) %f2 = Gaussian(~6e4, $ctr, $b+$c) %f3 = Gaussian(height=~66254., hwhm=~0.264, center=~24.7)r?r@}rA(hUh j;ubaubhN)rB}rC(hX6Every expression which is valid on the right-hand side of a variable assignment can be used as a variable. If it is not just a name of a variable, an automatic variable is created. In the above examples, two variables were implicitely created for ``%f2``: first for value ``6e4`` and the second for ``$b+$c``).h jh&h'h-hQh/}rD(h3]h4]h2]h1]h5]uh8Kh9hh:]rE(hJXEvery expression which is valid on the right-hand side of a variable assignment can be used as a variable. If it is not just a name of a variable, an automatic variable is created. In the above examples, two variables were implicitely created for rFrG}rH(hXEvery expression which is valid on the right-hand side of a variable assignment can be used as a variable. If it is not just a name of a variable, an automatic variable is created. In the above examples, two variables were implicitely created for h jBubj)rI}rJ(hX``%f2``h/}rK(h3]h4]h2]h1]h5]uh jBh:]rLhJX%f2rMrN}rO(hUh jIubah-jubhJX: first for value rPrQ}rR(hX: first for value h jBubj)rS}rT(hX``6e4``h/}rU(h3]h4]h2]h1]h5]uh jBh:]rVhJX6e4rWrX}rY(hUh jSubah-jubhJX and the second for rZr[}r\(hX and the second for h jBubj)r]}r^(hX ``$b+$c``h/}r_(h3]h4]h2]h1]h5]uh jBh:]r`hJX$b+$crarb}rc(hUh j]ubah-jubhJX).rdre}rf(hX).h jBubeubhN)rg}rh(hXlIf the names of function's parameters are given (like for ``%f3``), the variables can be given in any order.h jh&h'h-hQh/}ri(h3]h4]h2]h1]h5]uh8Kh9hh:]rj(hJX:If the names of function's parameters are given (like for rkrl}rm(hX:If the names of function's parameters are given (like for h jgubj)rn}ro(hX``%f3``h/}rp(h3]h4]h2]h1]h5]uh jgh:]rqhJX%f3rrrs}rt(hUh jnubah-jubhJX+), the variables can be given in any order.rurv}rw(hX+), the variables can be given in any order.h jgubeubhN)rx}ry(hXFunction types can can have specified default values for some parameters. The variables for such parameters can be omitted, e.g.::h jh&h'h-hQh/}rz(h3]h4]h2]h1]h5]uh8Kh9hh:]r{hJXFunction types can can have specified default values for some parameters. The variables for such parameters can be omitted, e.g.:r|r}}r~(hXFunction types can can have specified default values for some parameters. The variables for such parameters can be omitted, e.g.:h jxubaubjs)r}r(hX=-> i Pearson7 Pearson7(height, center, hwhm, shape=2) = height/(1+((x-center)/hwhm)^2*(2^(1/shape)-1))^shape =-> %f4 = Pearson7(height=~66254., center=~24.7, fwhm=~0.264) # no shape is given New function %f4 was created.h jh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]rhJX=-> i Pearson7 Pearson7(height, center, hwhm, shape=2) = height/(1+((x-center)/hwhm)^2*(2^(1/shape)-1))^shape =-> %f4 = Pearson7(height=~66254., center=~24.7, fwhm=~0.264) # no shape is given New function %f4 was created.rr}r(hUh jubaubhN)r}r(hXuFunctions can be copied. The following command creates a deep copy (i.e. all variables are also duplicated) of %foo::h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJXtFunctions can be copied. The following command creates a deep copy (i.e. all variables are also duplicated) of %foo:rr}r(hXtFunctions can be copied. The following command creates a deep copy (i.e. all variables are also duplicated) of %foo:h jubaubjs)r}r(hX%bar = copy(%foo)h jh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]rhJX%bar = copy(%foo)rr}r(hUh jubaubhN)r}r(hXWFunctions can be also created with the command ``guess``, as described in :ref:`guess`.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJX/Functions can be also created with the command rr}r(hX/Functions can be also created with the command h jubj)r}r(hX ``guess``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXguessrr}r(hUh jubah-jubhJX, as described in rr}r(hX, as described in h jubj)r}r(hX :ref:`guess`rh jh&h'h-jh/}r(UreftypeXrefjjXguessU refdomainXstdrh1]h2]U refexplicith3]h4]h5]jjuh8Kh:]rj)r}r(hjh/}r(h3]h4]r(jjXstd-refreh2]h1]h5]uh jh:]rhJXguessrr}r(hUh jubah-jubaubhJX.r}r(hX.h jubeubhN)r}r(hXGVariables bound to the function parameters can be changed at any time::rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJXFVariables bound to the function parameters can be changed at any time:rr}r(hXFVariables bound to the function parameters can be changed at any time:h jubaubjs)r}r(hXK=-> %f = Pearson7(height=~66254., center=~24.7, fwhm=~0.264) New function %f was created. =-> %f.center=~24.8 =-> $h = ~66254 =-> %f.height=$h =-> info %f %f = Pearson7($h, $_5, $_3, $_4) =-> $h = ~60000 # variables are kept by name, so this also changes %f =-> %p1.center = %p2.center + 3 # keep fixed distance between %p1 and %p2h jh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]rhJXK=-> %f = Pearson7(height=~66254., center=~24.7, fwhm=~0.264) New function %f was created. =-> %f.center=~24.8 =-> $h = ~66254 =-> %f.height=$h =-> info %f %f = Pearson7($h, $_5, $_3, $_4) =-> $h = ~60000 # variables are kept by name, so this also changes %f =-> %p1.center = %p2.center + 3 # keep fixed distance between %p1 and %p2rr}r(hUh jubaubhN)r}r(hX,Functions can be deleted using the command::rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJX+Functions can be deleted using the command:rr}r(hX+Functions can be deleted using the command:h jubaubjs)r}r(hXdelete %functionh jh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Kh9hh:]rhJXdelete %functionrr}r(hUh jubaubh*)r}r(hX .. _flist:h jh&h'h-h.h/}r(h1]h2]h3]h4]h5]h6Uflistruh8Kh9hh:]ubeubh!)r}r(hUh h$h&h'h(}rhjsh-h;h/}r(h3]h4]h2]h1]r(Ubuilt-in-functionsrjeh5]r(hheuh8Kh9hh@}rjjsh:]r(hC)r}r(hXBuilt-In Functionsrh jh&h'h-hGh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rhJXBuilt-In Functionsrr}r(hjh jubaubhN)r}r(hXThe list of all functions can be obtained using ``i types``. Some formulae here have long parameter names (like "height", "center" and "hwhm") replaced with :math:`a_i`h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]r(hJX0The list of all functions can be obtained using rr}r(hX0The list of all functions can be obtained using h jubj)r}r(hX ``i types``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXi typesrr}r(hUh jubah-jubhJXb. Some formulae here have long parameter names (like "height", "center" and "hwhm") replaced with rr}r(hXb. Some formulae here have long parameter names (like "height", "center" and "hwhm") replaced with h jubh)r}r(hUh/}r(UlatexXa_ih1]h2]h3]h4]h5]uh jh:]h-hubeubhN)r}r(hX **Gaussian:**rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Kh9hh:]rcdocutils.nodes strong r)r}r(hjh/}r(h3]h4]h2]h1]h5]uh jh:]rhJX Gaussian:rr}r (hUh jubah-Ustrongr ubaubj)r }r (hUh jh&h'h-jh/}r (j XHy = a_0 \exp\left[-\ln(2)\left(\frac{x-a_1}{a_2}\right)^{2}\right] j h1]h2]h3]h4]h5]jjjNuh8Kh9hh:]ubhN)r}r(hX**SplitGaussian:**rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]rj)r}r(hjh/}r(h3]h4]h2]h1]h5]uh jh:]rhJXSplitGaussian:rr}r(hUh jubah-j ubaubj)r}r(hUh jh&h'h-jh/}r(j Xy(x;a_0,a_1,a_2,a_3) = \begin{cases} \textrm{Gaussian}(x;a_0,a_1,a_2) & x\leq a_1\\ \textrm{Gaussian}(x;a_0,a_1,a_3) & x>a_1\end{cases} j h1]h2]h3]h4]h5]jjjNuh8Mh9hh:]ubhN)r}r(hX**GaussianA:**rh jh&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8M h9hh:]r!j)r"}r#(hjh/}r$(h3]h4]h2]h1]h5]uh jh:]r%hJX GaussianA:r&r'}r((hUh j"ubah-j ubaubj)r)}r*(hUh jh&h'h-jh/}r+(j Xmy = \sqrt{\frac{\ln(2)}{\pi}}\frac{a_0}{a_2} \exp\left[-\ln(2)\left(\frac{x-a_1}{a_2}\right)^{2}\right] j h1]h2]h3]h4]h5]jjjNuh8M h9hh:]ubhN)r,}r-(hX**Lorentzian:**r.h jh&h'h-hQh/}r/(h3]h4]h2]h1]h5]uh8Mh9hh:]r0j)r1}r2(hj.h/}r3(h3]h4]h2]h1]h5]uh j,h:]r4hJX Lorentzian:r5r6}r7(hUh j1ubah-j ubaubj)r8}r9(hUh jh&h'h-jh/}r:(j X4y = \frac{a_0}{1+\left(\frac{x-a_1}{a_2}\right)^2} j h1]h2]h3]h4]h5]jjjNuh8Mh9hh:]ubhN)r;}r<(hX**SplitLorentzian:**r=h jh&h'h-hQh/}r>(h3]h4]h2]h1]h5]uh8Mh9hh:]r?j)r@}rA(hj=h/}rB(h3]h4]h2]h1]h5]uh j;h:]rChJXSplitLorentzian:rDrE}rF(hUh j@ubah-j ubaubj)rG}rH(hUh jh&h'h-jh/}rI(j Xy(x;a_0,a_1,a_2,a_3) = \begin{cases} \textrm{Lorentzian}(x;a_0,a_1,a_2) & x\leq a_1\\ \textrm{Lorentzian}(x;a_0,a_1,a_3) & x>a_1\end{cases} j h1]h2]h3]h4]h5]jjjNuh8Mh9hh:]ubhN)rJ}rK(hX**LorentzianA:**rLh jh&h'h-hQh/}rM(h3]h4]h2]h1]h5]uh8Mh9hh:]rNj)rO}rP(hjLh/}rQ(h3]h4]h2]h1]h5]uh jJh:]rRhJX LorentzianA:rSrT}rU(hUh jOubah-j ubaubj)rV}rW(hUh jh&h'h-jh/}rX(j XHy = \frac{a_0}{\pi a_2\left[1+\left(\frac{x-a_1}{a_2}\right)^2\right]} j h1]h2]h3]h4]h5]jjjNuh8Mh9hh:]ubhN)rY}rZ(hX**Pearson VII (Pearson7):**r[h jh&h'h-hQh/}r\(h3]h4]h2]h1]h5]uh8M h9hh:]r]j)r^}r_(hj[h/}r`(h3]h4]h2]h1]h5]uh jYh:]rahJXPearson VII (Pearson7):rbrc}rd(hUh j^ubah-j ubaubj)re}rf(hUh jh&h'h-jh/}rg(j Xy = \frac{a_0} {\left[1+\left(\frac{x-a_1}{a_2}\right)^2 \left(2^{\frac{1}{a_3}}-1\right)\right]^{a_3}} j h1]h2]h3]h4]h5]jjjNuh8M"h9hh:]ubhN)rh}ri(hX&**split Pearson VII (SplitPearson7):**rjh jh&h'h-hQh/}rk(h3]h4]h2]h1]h5]uh8M&h9hh:]rlj)rm}rn(hjjh/}ro(h3]h4]h2]h1]h5]uh jhh:]rphJX"split Pearson VII (SplitPearson7):rqrr}rs(hUh jmubah-j ubaubj)rt}ru(hUh jh&h'h-jh/}rv(j Xy(x;a_{0},a_{1},a_{2},a_{3},a_{4},a_{5}) = \begin{cases} \textrm{Pearson7}(x;a_0,a_1,a_2,a_4) & x\leq a_1\\ \textrm{Pearson7}(x;a_0,a_1,a_3,a_5) & x>a_1\end{cases} j h1]h2]h3]h4]h5]jjjNuh8M(h9hh:]ubhN)rw}rx(hX!**Pearson VII Area (Pearson7A):**ryh jh&h'h-hQh/}rz(h3]h4]h2]h1]h5]uh8M-h9hh:]r{j)r|}r}(hjyh/}r~(h3]h4]h2]h1]h5]uh jwh:]rhJXPearson VII Area (Pearson7A):rr}r(hUh j|ubah-j ubaubj)r}r(hUh jh&h'h-jh/}r(j Xy = \frac{a_0\Gamma(a_3)\sqrt{2^{\frac{1}{a_3}}-1}} {a_2\Gamma(a_3-\frac{1}{2})\sqrt{\pi} \left[ 1 + \left(\frac{x-a_1}{a_2}\right)^2 \left(2^{\frac{1}{a_3}}-1\right) \right]^{a_3}} j h1]h2]h3]h4]h5]jjjNuh8M/h9hh:]ubhN)r}r(hX**Pseudo-Voigt (PseudoVoigt):**rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8M6h9hh:]rj)r}r(hjh/}r(h3]h4]h2]h1]h5]uh jh:]rhJXPseudo-Voigt (PseudoVoigt):rr}r(hUh jubah-j ubaubj)r}r(hUh jh&h'h-jh/}r(j Xy = a_0 \left[(1-a_3)\exp\left(-\ln(2)\left(\frac{x-a_1}{a_2}\right)^2\right) + \frac{a_3}{1+\left(\frac{x-a_1}{a_2}\right)^2} \right] j h1]h2]h3]h4]h5]jjjNuh8M8h9hh:]ubhN)r}r(hXPseudo-Voigt is a name given to the sum of Gaussian and Lorentzian. :math:`a_3` parameters in Pearson VII and Pseudo-Voigt are not related.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8M=h9hh:]r(hJXDPseudo-Voigt is a name given to the sum of Gaussian and Lorentzian. rr}r(hXDPseudo-Voigt is a name given to the sum of Gaussian and Lorentzian. h jubh)r}r(hUh/}r(UlatexXa_3h1]h2]h3]h4]h5]uh jh:]h-hubhJX< parameters in Pearson VII and Pseudo-Voigt are not related.rr}r(hX< parameters in Pearson VII and Pseudo-Voigt are not related.h jubeubhN)r}r(hX***split Pseudo-Voigt (SplitPseudoVoigt):**rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8MAh9hh:]rj)r}r(hjh/}r(h3]h4]h2]h1]h5]uh jh:]rhJX&split Pseudo-Voigt (SplitPseudoVoigt):rr}r(hUh jubah-j ubaubj)r}r(hUh jh&h'h-jh/}r(j Xy(x;a_{0},a_{1},a_{2},a_{3},a_{4},a_{5}) = \begin{cases} \textrm{PseudoVoigt}(x;a_0,a_1,a_2,a_4) & x\leq a_1\\ \textrm{PseudoVoigt}(x;a_0,a_1,a_3,a_5) & x>a_1\end{cases} j h1]h2]h3]h4]h5]jjjNuh8MCh9hh:]ubhN)r}r(hX%**Pseudo-Voigt Area (PseudoVoigtA):**rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8MHh9hh:]rj)r}r(hjh/}r(h3]h4]h2]h1]h5]uh jh:]rhJX!Pseudo-Voigt Area (PseudoVoigtA):rr}r(hUh jubah-j ubaubj)r}r(hUh jh&h'h-jh/}r(j Xy = a_0 \left[\frac{(1-a_3)\sqrt{\ln(2)}}{a_2\sqrt{\pi}} \exp\left(-\ln2\left(\frac{x-a_1}{a_2}\right)^2\right) + \frac{a_3}{\pi a_2 \left[1+\left(\frac{x-a_1}{a_2}\right)^2\right]} \right] j h1]h2]h3]h4]h5]jjjNuh8MJh9hh:]ubhN)r}r(hX **Voigt:**rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8MQh9hh:]rj)r}r(hjh/}r(h3]h4]h2]h1]h5]uh jh:]rhJXVoigt:rr}r(hUh jubah-j ubaubj)r}r(hUh jh&h'h-jh/}r(j Xy = \frac {a_0 \int_{-\infty}^{+\infty} \frac{\exp(-t^2)}{a_3^2+(\frac{x-a_1}{a_2}-t)^2} dt} {\int_{-\infty}^{+\infty} \frac{\exp(-t^2)}{a_3^2+t^2} dt} j h1]h2]h3]h4]h5]jjjNuh8MSh9hh:]ubhN)r}r(hXThe Voigt function is a convolution of Gaussian and Lorentzian functions. :math:`a_0` = heigth, :math:`a_1` = center, :math:`a_2` is proportional to the Gaussian width, and :math:`a_3` is proportional to the ratio of Lorentzian and Gaussian widths.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8MZh9hh:]r(hJXJThe Voigt function is a convolution of Gaussian and Lorentzian functions. rr}r(hXJThe Voigt function is a convolution of Gaussian and Lorentzian functions. h jubh)r}r(hUh/}r(UlatexXa_0h1]h2]h3]h4]h5]uh jh:]h-hubhJX = heigth, rr}r(hX = heigth, h jubh)r}r(hUh/}r(UlatexXa_1h1]h2]h3]h4]h5]uh jh:]h-hubhJX = center, rr}r(hX = center, h jubh)r}r(hUh/}r(UlatexXa_2h1]h2]h3]h4]h5]uh jh:]h-hubhJX, is proportional to the Gaussian width, and rr}r(hX, is proportional to the Gaussian width, and h jubh)r}r(hUh/}r(UlatexXa_3h1]h2]h3]h4]h5]uh jh:]h-hubhJX@ is proportional to the ratio of Lorentzian and Gaussian widths.rr}r(hX@ is proportional to the ratio of Lorentzian and Gaussian widths.h jubeubhN)r}r(hX-Voigt is computed according to R.J.Wells, *Rapid approximation to the Voigt/Faddeeva function and its derivatives*, Journal of Quantitative Spectroscopy & Radiative Transfer 62 (1999) 29-48. (See also: http://www.atm.ox.ac.uk/user/wells/voigt.html). The approximation is very fast, but not very exact.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8M`h9hh:]r(hJX*Voigt is computed according to R.J.Wells, rr}r(hX*Voigt is computed according to R.J.Wells, h jubh)r}r(hXH*Rapid approximation to the Voigt/Faddeeva function and its derivatives*h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXFRapid approximation to the Voigt/Faddeeva function and its derivativesrr}r(hUh jubah-hubhJXX, Journal of Quantitative Spectroscopy & Radiative Transfer 62 (1999) 29-48. (See also: rr}r(hXX, Journal of Quantitative Spectroscopy & Radiative Transfer 62 (1999) 29-48. (See also: h jubhW)r}r(hX-http://www.atm.ox.ac.uk/user/wells/voigt.htmlrh/}r(Urefurijh1]h2]h3]h4]h5]uh jh:]rhJX-http://www.atm.ox.ac.uk/user/wells/voigt.htmlrr}r(hUh jubah-haubhJX6). The approximation is very fast, but not very exact.rr}r (hX6). The approximation is very fast, but not very exact.h jubeubhN)r }r (hXFWHM is estimated using the approximation by Olivero and Longbothum (`JQSRT 17, 233 (1977)`__): :math:`0.5346 w_L + \sqrt{0.2169 w_L^2 + w_G^2}`.h jh&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mgh9hh:]r (hJXEFWHM is estimated using the approximation by Olivero and Longbothum (rr}r(hXEFWHM is estimated using the approximation by Olivero and Longbothum (h j ubhW)r}r(hX`JQSRT 17, 233 (1977)`__UresolvedrKh j h-hah/}r(UnameXJQSRT 17, 233 (1977)h[X.http://dx.doi.org/10.1016/0022-4073(77)90161-3rh1]h2]h3]h4]h5]U anonymousrKuh:]rhJXJQSRT 17, 233 (1977)rr}r(hUh jubaubhJX): rr}r(hX): h j ubh)r}r(hUh/}r (UlatexX(0.5346 w_L + \sqrt{0.2169 w_L^2 + w_G^2}h1]h2]h3]h4]h5]uh j h:]h-hubhJX.r!}r"(hX.h j ubeubh*)r#}r$(hX1__ http://dx.doi.org/10.1016/0022-4073(77)90161-3hdKh jh&h'h-h.h/}r%(h[jh1]r&Uid2r'ah2]h3]h4]h5]jKuh8Mkh9hh:]ubhN)r(}r)(hX **VoigtA:**r*h jh&h'h-hQh/}r+(h3]h4]h2]h1]h5]uh8Mmh9hh:]r,j)r-}r.(hj*h/}r/(h3]h4]h2]h1]h5]uh j(h:]r0hJXVoigtA:r1r2}r3(hUh j-ubah-j ubaubj)r4}r5(hUh jh&h'h-jh/}r6(j Xxy = \frac{a_0}{\sqrt{\pi}a_2} \int_{-\infty}^{+\infty} \frac{\exp(-t^2)}{a_3^2+(\frac{x-a_1}{a_2}-t)^2} dt j h1]h2]h3]h4]h5]jjjNuh8Moh9hh:]ubhN)r7}r8(hX***Exponentially Modified Gaussian (EMG):**r9h jh&h'h-hQh/}r:(h3]h4]h2]h1]h5]uh8Mth9hh:]r;j)r<}r=(hj9h/}r>(h3]h4]h2]h1]h5]uh j7h:]r?hJX&Exponentially Modified Gaussian (EMG):r@rA}rB(hUh j<ubah-j ubaubj)rC}rD(hUh jh&h'h-jh/}rE(j Xy = \frac{ac\sqrt{2\pi}}{2d} \exp\left(\frac{c^2}{2d^2}-\frac{x-b}{d}\right) \left[\frac{d}{\left|d\right|} +\textrm{erf}\left(\frac{x-b}{\sqrt{2}c} - \frac{c}{\sqrt{2}d}\right) \right] j h1]h2]h3]h4]h5]jjjNuh8Mvh9hh:]ubhN)rF}rG(hXThe exponentially modified Gaussian is a convolution of Gaussian and exponential probability density. *a* = Gaussian heigth, *b* = location parameter (Gaussian center), *c* = Gaussian width, *d* = distortion parameter (a.k.a. modification factor or time constant).h jh&h'h-hQh/}rH(h3]h4]h2]h1]h5]uh8M~h9hh:]rI(hJXfThe exponentially modified Gaussian is a convolution of Gaussian and exponential probability density. rJrK}rL(hXfThe exponentially modified Gaussian is a convolution of Gaussian and exponential probability density. h jFubh)rM}rN(hX*a*h/}rO(h3]h4]h2]h1]h5]uh jFh:]rPhJXarQ}rR(hUh jMubah-hubhJX = Gaussian heigth, rSrT}rU(hX = Gaussian heigth, h jFubh)rV}rW(hX*b*h/}rX(h3]h4]h2]h1]h5]uh jFh:]rYhJXbrZ}r[(hUh jVubah-hubhJX) = location parameter (Gaussian center), r\r]}r^(hX) = location parameter (Gaussian center), h jFubh)r_}r`(hX*c*h/}ra(h3]h4]h2]h1]h5]uh jFh:]rbhJXcrc}rd(hUh j_ubah-hubhJX = Gaussian width, rerf}rg(hX = Gaussian width, h jFubh)rh}ri(hX*d*h/}rj(h3]h4]h2]h1]h5]uh jFh:]rkhJXdrl}rm(hUh jhubah-hubhJXF = distortion parameter (a.k.a. modification factor or time constant).rnro}rp(hXF = distortion parameter (a.k.a. modification factor or time constant).h jFubeubhN)rq}rr(hX**LogNormal:**rsh jh&h'h-hQh/}rt(h3]h4]h2]h1]h5]uh8Mh9hh:]ruj)rv}rw(hjsh/}rx(h3]h4]h2]h1]h5]uh jqh:]ryhJX LogNormal:rzr{}r|(hUh jvubah-j ubaubj)r}}r~(hUh jh&h'h-jh/}r(j Xy = h \exp\left\{ -\ln(2) \left[ \frac{\ln\left(1+2b\frac{x-c}{w}\right)}{b} \right]^{2} \right\} j h1]h2]h3]h4]h5]jjjNuh8Mh9hh:]ubhN)r}r(hX#**Doniach-Sunjic (DoniachSunjic):**rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]rj)r}r(hjh/}r(h3]h4]h2]h1]h5]uh jh:]rhJXDoniach-Sunjic (DoniachSunjic):rr}r(hUh jubah-j ubaubj)r}r(hUh jh&h'h-jh/}r(j Xyy = \frac{h\left[\frac{\pi a}{2} + (1-a)\arctan\left(\frac{x-E}{F}\right)\right]} {F+(x-E)^2} j h1]h2]h3]h4]h5]jjjNuh8Mh9hh:]ubhN)r}r(hX**Polynomial5:**rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]rj)r}r(hjh/}r(h3]h4]h2]h1]h5]uh jh:]rhJX Polynomial5:rr}r(hUh jubah-j ubaubj)r}r(hUh jh&h'h-jh/}r(j X8y = a_0 + a_1 x +a_2 x^2 + a_3 x^3 + a_4 x^4 + a_5 x^5 j h1]h2]h3]h4]h5]jjjNuh8Mh9hh:]ubeubh!)r}r(hUh h$h&h'h-h;h/}r(h3]h4]h2]h1]rUvariadic-functionsrah5]rh auh8Mh9hh:]r(hC)r}r(hXVariadic Functionsrh jh&h'h-hGh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]rhJXVariadic Functionsrr}r(hjh jubaubhN)r}r(hXg*Variadic* function types have variable number of parameters. Two variadic function types are defined::h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]r(h)r}r(hX *Variadic*h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXVariadicrr}r(hUh jubah-hubhJX\ function types have variable number of parameters. Two variadic function types are defined:rr}r(hX\ function types have variable number of parameters. Two variadic function types are defined:h jubeubjs)r}r(hX9Spline(x1, y1, x2, y2, ...) Polyline(x1, y1, x2, y2, ...)h jh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Mh9hh:]rhJX9Spline(x1, y1, x2, y2, ...) Polyline(x1, y1, x2, y2, ...)rr}r(hUh jubaubhN)r}r(hXThis example::rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]rhJX This example:rr}r(hX This example:h jubaubjs)r}r(hX/%f = Spline(22.1, 37.9, 48.1, 17.2, 93.0, 20.7)h jh&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Mh9hh:]rhJX/%f = Spline(22.1, 37.9, 48.1, 17.2, 93.0, 20.7)rr}r(hUh jubaubhN)r}r(hXqcreates a function that is a *natural cubic spline* interpolation through points (22.1, 37.9), (48.1, 17.2), ....h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]r(hJXcreates a function that is a rr}r(hXcreates a function that is a h jubh)r}r(hX*natural cubic spline*h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXnatural cubic splinerr}r(hUh jubah-hubhJX> interpolation through points (22.1, 37.9), (48.1, 17.2), ....rr}r(hX> interpolation through points (22.1, 37.9), (48.1, 17.2), ....h jubeubhN)r}r(hXJThe ``Polyline`` function is a polyline interpolation (spline of order 1).rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]r(hJXThe rr}r(hXThe h jubj)r}r(hX ``Polyline``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXPolylinerr}r(hUh jubah-jubhJX: function is a polyline interpolation (spline of order 1).rr}r(hX: function is a polyline interpolation (spline of order 1).h jubeubhN)r}r(hXnBoth ``Spline`` and ``Polyline`` functions are primarily used for the manual baseline subtraction via the GUI.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]r(hJXBoth rr}r(hXBoth h jubj)r}r(hX ``Spline``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXSplinerr}r(hUh jubah-jubhJX and rr}r(hX and h jubj)r}r(hX ``Polyline``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXPolyliner r }r (hUh jubah-jubhJXN functions are primarily used for the manual baseline subtraction via the GUI.r r }r(hXN functions are primarily used for the manual baseline subtraction via the GUI.h jubeubhN)r}r(hXThe derivatives of Spline function are not calculated, so this function is not refined by the default, derivative-based fitting algorithm.rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]rhJXThe derivatives of Spline function are not calculated, so this function is not refined by the default, derivative-based fitting algorithm.rr}r(hjh jubaubhN)r}r(hXSince the Polyline derivatives are calculated, it is possible to perform weighted least squares approximation by broken lines, although non-linear fitting algorithms are not optimal for this task.rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]rhJXSince the Polyline derivatives are calculated, it is possible to perform weighted least squares approximation by broken lines, although non-linear fitting algorithms are not optimal for this task.rr}r(hjh jubaubh*)r}r (hX.. _udf:h jh&h'h-h.h/}r!(h1]h2]h3]h4]h5]h6Uudfr"uh8Mh9hh:]ubeubh!)r#}r$(hUh h$h&h'h(}r%hjsh-h;h/}r&(h3]h4]h2]h1]r'(Uuser-defined-functions-udfr(j"eh5]r)(hheuh8Mh9hh@}r*j"jsh:]r+(hC)r,}r-(hXUser-Defined Functions (UDF)r.h j#h&h'h-hGh/}r/(h3]h4]h2]h1]h5]uh8Mh9hh:]r0hJXUser-Defined Functions (UDF)r1r2}r3(hj.h j,ubaubhN)r4}r5(hXwUser-defined function types can be added using command ``define``, and then used in the same way as built-in functions.h j#h&h'h-hQh/}r6(h3]h4]h2]h1]h5]uh8Mh9hh:]r7(hJX7User-defined function types can be added using command r8r9}r:(hX7User-defined function types can be added using command h j4ubj)r;}r<(hX ``define``h/}r=(h3]h4]h2]h1]h5]uh j4h:]r>hJXdefiner?r@}rA(hUh j;ubah-jubhJX6, and then used in the same way as built-in functions.rBrC}rD(hX6, and then used in the same way as built-in functions.h j4ubeubhN)rE}rF(hX Example::rGh j#h&h'h-hQh/}rH(h3]h4]h2]h1]h5]uh8Mh9hh:]rIhJXExample:rJrK}rL(hXExample:h jEubaubjs)rM}rN(hXPdefine MyGaussian(height, center, hwhm) = height*exp(-ln(2)*((x-center)/hwhm)^2)h j#h&h'h-jvh/}rO(jxjyh1]h2]h3]h4]h5]uh8Mh9hh:]rPhJXPdefine MyGaussian(height, center, hwhm) = height*exp(-ln(2)*((x-center)/hwhm)^2)rQrR}rS(hUh jMubaubcdocutils.nodes bullet_list rT)rU}rV(hUh j#h&h'h-U bullet_listrWh/}rX(UbulletrYX-h1]h2]h3]h4]h5]uh8Mh9hh:]rZ(cdocutils.nodes list_item r[)r\}r](hX}The name of new type must start with an upper-case letter, contain only letters and digits and have at least two characters. h jUh&h'h-U list_itemr^h/}r_(h3]h4]h2]h1]h5]uh8Nh9hh:]r`hN)ra}rb(hX|The name of new type must start with an upper-case letter, contain only letters and digits and have at least two characters.rch j\h&h'h-hQh/}rd(h3]h4]h2]h1]h5]uh8Mh:]rehJX|The name of new type must start with an upper-case letter, contain only letters and digits and have at least two characters.rfrg}rh(hjch jaubaubaubj[)ri}rj(hX<The name of the type is followed by parameters in brackets. h jUh&h'h-j^h/}rk(h3]h4]h2]h1]h5]uh8Nh9hh:]rlhN)rm}rn(hX;The name of the type is followed by parameters in brackets.roh jih&h'h-hQh/}rp(h3]h4]h2]h1]h5]uh8Mh:]rqhJX;The name of the type is followed by parameters in brackets.rrrs}rt(hjoh jmubaubaubj[)ru}rv(hXvParameter name must start with lowercase letter and, contain only lowercase letters, digits and the underscore ('_'). h jUh&h'h-j^h/}rw(h3]h4]h2]h1]h5]uh8Nh9hh:]rxhN)ry}rz(hXuParameter name must start with lowercase letter and, contain only lowercase letters, digits and the underscore ('_').r{h juh&h'h-hQh/}r|(h3]h4]h2]h1]h5]uh8Mh:]r}hJXuParameter name must start with lowercase letter and, contain only lowercase letters, digits and the underscore ('_').r~r}r(hj{h jyubaubaubj[)r}r(hXsThe name "x" is reserved, do not put it into parameter list, just use it on the right-hand side of the definition. h jUh&h'h-j^h/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]rhN)r}r(hXrThe name "x" is reserved, do not put it into parameter list, just use it on the right-hand side of the definition.rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh:]rhJXrThe name "x" is reserved, do not put it into parameter list, just use it on the right-hand side of the definition.rr}r(hjh jubaubaubj[)r}r(hXThere are special names of parameters that Fityk understands: * if the functions is peak-like: ``height``, ``center``, ``hwhm``, ``area``, * if the function is more like linear: ``slope``, ``intercept``, ``avgy``. The initial values of these parameters can be guessed (command ``guess``) from the data. ``hwhm`` means half width at half maximum, the other names are self-explaining. h jUh&h'h-j^h/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]r(hN)r}r(hX=There are special names of parameters that Fityk understands:rh jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh:]rhJX=There are special names of parameters that Fityk understands:rr}r(hjh jubaubjT)r}r(hUh/}r(jYX*h1]h2]h3]h4]h5]uh jh:]r(j[)r}r(hXKif the functions is peak-like: ``height``, ``center``, ``hwhm``, ``area``, h/}r(h3]h4]h2]h1]h5]uh jh:]rhN)r}r(hXJif the functions is peak-like: ``height``, ``center``, ``hwhm``, ``area``,h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh:]r(hJXif the functions is peak-like: rr}r(hXif the functions is peak-like: h jubj)r}r(hX ``height``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXheightrr}r(hUh jubah-jubhJX, rr}r(hX, h jubj)r}r(hX ``center``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXcenterrr}r(hUh jubah-jubhJX, rr}r(hX, h jubj)r}r(hX``hwhm``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXhwhmrr}r(hUh jubah-jubhJX, rr}r(hX, h jubj)r}r(hX``area``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXarearr}r(hUh jubah-jubhJX,r}r(hX,h jubeubah-j^ubj[)r}r(hXIif the function is more like linear: ``slope``, ``intercept``, ``avgy``. h/}r(h3]h4]h2]h1]h5]uh jh:]rhN)r}r(hXHif the function is more like linear: ``slope``, ``intercept``, ``avgy``.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh:]r(hJX%if the function is more like linear: rr}r(hX%if the function is more like linear: h jubj)r}r(hX ``slope``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXsloperr}r(hUh jubah-jubhJX, rr}r(hX, h jubj)r}r(hX ``intercept``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX interceptrr}r(hUh jubah-jubhJX, rr}r(hX, h jubj)r}r(hX``avgy``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXavgyrr}r(hUh jubah-jubhJX.r}r(hX.h jubeubah-j^ubeh-jWubhN)r}r(hXThe initial values of these parameters can be guessed (command ``guess``) from the data. ``hwhm`` means half width at half maximum, the other names are self-explaining.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh:]r(hJX?The initial values of these parameters can be guessed (command rr}r(hX?The initial values of these parameters can be guessed (command h jubj)r}r(hX ``guess``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXguessrr}r(hUh jubah-jubhJX) from the data. rr}r(hX) from the data. h jubj)r}r (hX``hwhm``h/}r (h3]h4]h2]h1]h5]uh jh:]r hJXhwhmr r }r(hUh jubah-jubhJXG means half width at half maximum, the other names are self-explaining.rr}r(hXG means half width at half maximum, the other names are self-explaining.h jubeubeubj[)r}r(hXEach parameter may have a default value (see the examples below). The default value can be either a number or an expression that depends on the parameters listed above (e.g. ``0.8*hwhm``). The default value always binds a simple-variable to the parameter. h jUh&h'h-j^h/}r(h3]h4]h2]h1]h5]uh8Nh9hh:]rhN)r}r(hXEach parameter may have a default value (see the examples below). The default value can be either a number or an expression that depends on the parameters listed above (e.g. ``0.8*hwhm``). The default value always binds a simple-variable to the parameter.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh:]r(hJXEach parameter may have a default value (see the examples below). The default value can be either a number or an expression that depends on the parameters listed above (e.g. rr}r(hXEach parameter may have a default value (see the examples below). The default value can be either a number or an expression that depends on the parameters listed above (e.g. h jubj)r}r(hX ``0.8*hwhm``h/}r(h3]h4]h2]h1]h5]uh jh:]r hJX0.8*hwhmr!r"}r#(hUh jubah-jubhJXE). The default value always binds a simple-variable to the parameter.r$r%}r&(hXE). The default value always binds a simple-variable to the parameter.h jubeubaubeubhN)r'}r((hX"UDFs can be defined in a few ways:r)h j#h&h'h-hQh/}r*(h3]h4]h2]h1]h5]uh8Mh9hh:]r+hJX"UDFs can be defined in a few ways:r,r-}r.(hj)h j'ubaubjT)r/}r0(hUh j#h&h'h-jWh/}r1(jYX-h1]h2]h3]h4]h5]uh8Mh9hh:]r2(j[)r3}r4(hX5by giving a full formula, like in the example above, h j/h&h'h-j^h/}r5(h3]h4]h2]h1]h5]uh8Nh9hh:]r6hN)r7}r8(hX4by giving a full formula, like in the example above,r9h j3h&h'h-hQh/}r:(h3]h4]h2]h1]h5]uh8Mh:]r;hJX4by giving a full formula, like in the example above,r<r=}r>(hj9h j7ubaubaubj[)r?}r@(hX^as a :dfn:`re-parametrization` of existing function (see the ``GaussianArea`` example below), h j/h&h'h-j^h/}rA(h3]h4]h2]h1]h5]uh8Nh9hh:]rBhN)rC}rD(hX]as a :dfn:`re-parametrization` of existing function (see the ``GaussianArea`` example below),h j?h&h'h-hQh/}rE(h3]h4]h2]h1]h5]uh8Mh:]rF(hJXas a rGrH}rI(hXas a h jCubh)rJ}rK(hX:dfn:`re-parametrization`h/}rL(h3]h4]rMhah2]h1]h5]uh jCh:]rNhJXre-parametrizationrOrP}rQ(hUh jJubah-hubhJX of existing function (see the rRrS}rT(hX of existing function (see the h jCubj)rU}rV(hX``GaussianArea``h/}rW(h3]h4]h2]h1]h5]uh jCh:]rXhJX GaussianArearYrZ}r[(hUh jUubah-jubhJX example below),r\r]}r^(hX example below),h jCubeubaubj[)r_}r`(hXIas a sum of already defined functions (see the ``GLSum`` example below), h j/h&h'h-j^h/}ra(h3]h4]h2]h1]h5]uh8Nh9hh:]rbhN)rc}rd(hXHas a sum of already defined functions (see the ``GLSum`` example below),h j_h&h'h-hQh/}re(h3]h4]h2]h1]h5]uh8Mh:]rf(hJX/as a sum of already defined functions (see the rgrh}ri(hX/as a sum of already defined functions (see the h jcubj)rj}rk(hX ``GLSum``h/}rl(h3]h4]h2]h1]h5]uh jch:]rmhJXGLSumrnro}rp(hUh jjubah-jubhJX example below),rqrr}rs(hX example below),h jcubeubaubj[)rt}ru(hXas a splitted (bifurcated) function: ``x <`` *expression* ``?`` *Function1(...)* ``:`` *Function2(...)* (see the ``SplitL`` example below). h j/h&h'h-j^h/}rv(h3]h4]h2]h1]h5]uh8Nh9hh:]rwhN)rx}ry(hXas a splitted (bifurcated) function: ``x <`` *expression* ``?`` *Function1(...)* ``:`` *Function2(...)* (see the ``SplitL`` example below).h jth&h'h-hQh/}rz(h3]h4]h2]h1]h5]uh8Mh:]r{(hJX%as a splitted (bifurcated) function: r|r}}r~(hX%as a splitted (bifurcated) function: h jxubj)r}r(hX``x <``h/}r(h3]h4]h2]h1]h5]uh jxh:]rhJXx `, but the formula can also depend on *x*. Hopefully the examples can make the syntax clear::h j#h&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]r(hJXWWhen giving a full formula, the right-hand side of the equality sign is similar to the rr}r(hXWWhen giving a full formula, the right-hand side of the equality sign is similar to the h jubj)r}r(hX(:ref:`definiton of variable `rh jh&h'h-jh/}r(UreftypeXrefjjX variablesU refdomainXstdrh1]h2]U refexplicith3]h4]h5]jjuh8Mh:]rj)r}r(hjh/}r(h3]h4]r(jjXstd-refreh2]h1]h5]uh jh:]rhJXdefiniton of variablerr}r(hUh jubah-jubaubhJX%, but the formula can also depend on rr}r(hX%, but the formula can also depend on h jubh)r}r(hX*x*h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXxr}r(hUh jubah-hubhJX3. Hopefully the examples can make the syntax clear:rr}r(hX3. Hopefully the examples can make the syntax clear:h jubeubjs)r}r(hX"# this is how some built-in functions could be defined define MyGaussian(height, center, hwhm) = height*exp(-ln(2)*((x-center)/hwhm)^2) define MyLorentzian(height, center, hwhm) = height/(1+((x-center)/hwhm)^2) define MyCubic(a0=height,a1=0, a2=0, a3=0) = a0 + a1*x + a2*x^2 + a3*x^3 # supersonic beam arrival time distribution define SuBeArTiDi(c, s, v0, dv) = c*(s/x)^3*exp(-(((s/x)-v0)/dv)^2)/x # area-based Gaussian can be defined as modification of built-in Gaussian # (it is the same as built-in GaussianA function) define GaussianArea(area, center, hwhm) = Gaussian(area/hwhm/sqrt(pi/ln(2)), center, hwhm) # sum of Gaussian and Lorentzian, a.k.a. PseudoVoigt (should be in one line) define GLSum(height, center, hwhm, shape) = Gaussian(height*(1-shape), center, hwhm) + Lorentzian(height*shape, center, hwhm) # split-Gaussian, the same as built-in SplitGaussian (should be in one line) define SplitG(height, center, hwhm1=fwhm*0.5, hwhm2=fwhm*0.5) = x < center ? Lorentzian(height, center, hwhm1) : Lorentzian(height, center, hwhm2)h j#h&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Mh9hh:]rhJX"# this is how some built-in functions could be defined define MyGaussian(height, center, hwhm) = height*exp(-ln(2)*((x-center)/hwhm)^2) define MyLorentzian(height, center, hwhm) = height/(1+((x-center)/hwhm)^2) define MyCubic(a0=height,a1=0, a2=0, a3=0) = a0 + a1*x + a2*x^2 + a3*x^3 # supersonic beam arrival time distribution define SuBeArTiDi(c, s, v0, dv) = c*(s/x)^3*exp(-(((s/x)-v0)/dv)^2)/x # area-based Gaussian can be defined as modification of built-in Gaussian # (it is the same as built-in GaussianA function) define GaussianArea(area, center, hwhm) = Gaussian(area/hwhm/sqrt(pi/ln(2)), center, hwhm) # sum of Gaussian and Lorentzian, a.k.a. PseudoVoigt (should be in one line) define GLSum(height, center, hwhm, shape) = Gaussian(height*(1-shape), center, hwhm) + Lorentzian(height*shape, center, hwhm) # split-Gaussian, the same as built-in SplitGaussian (should be in one line) define SplitG(height, center, hwhm1=fwhm*0.5, hwhm2=fwhm*0.5) = x < center ? Lorentzian(height, center, hwhm1) : Lorentzian(height, center, hwhm2)rr}r(hUh jubaubhN)r}r(hXThere is a simple substitution mechanism that makes writing complicated functions easier. Substitutions must be assigned in the same line, after the keyword ``where``.h j#h&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh9hh:]r(hJXThere is a simple substitution mechanism that makes writing complicated functions easier. Substitutions must be assigned in the same line, after the keyword rr}r(hXThere is a simple substitution mechanism that makes writing complicated functions easier. Substitutions must be assigned in the same line, after the keyword h jubj)r}r(hX ``where``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJXwhererr}r(hUh jubah-jubhJX.r}r(hX.h jubeubhN)r}r(hX Example::rh j#h&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8M h9hh:]rhJXExample:rr}r(hXExample:h jubaubjs)r}r (hX define ReadShockley(sigma0=1, a=1) = sigma0 * t * (a - ln(t)) where t=x*pi/180 # more complicated example, with nested substitutions define FullGBE(k, alpha) = k * alpha * eta * (eta / tanh(eta) - ln (2*sinh(eta))) where eta = 2*pi/alpha * sin(theta/2), theta=x*pi/180h j#h&h'h-jvh/}r (jxjyh1]h2]h3]h4]h5]uh8M h9hh:]r hJX define ReadShockley(sigma0=1, a=1) = sigma0 * t * (a - ln(t)) where t=x*pi/180 # more complicated example, with nested substitutions define FullGBE(k, alpha) = k * alpha * eta * (eta / tanh(eta) - ln (2*sinh(eta))) where eta = 2*pi/alpha * sin(theta/2), theta=x*pi/180r r }r (hUh jubaubj)r }r (hXThe formula is parsed, derivatives of the formula are calculated symbolically, expressions are simplified and bytecode for virtual machine (VM) is created. When fitting, the VM calculates the value of the function and derivatives for every point.h j#h&h'h-jh/}r (h3]h4]r U"admonition-how-it-works-internallyr ah2]h1]h5]uh8Nh9hh:]r (hC)r }r (hXHow it works internallyr h j h&h'h-hGh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJXHow it works internallyr r }r (hj h j ubaubhN)r }r (hXThe formula is parsed, derivatives of the formula are calculated symbolically, expressions are simplified and bytecode for virtual machine (VM) is created.r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJXThe formula is parsed, derivatives of the formula are calculated symbolically, expressions are simplified and bytecode for virtual machine (VM) is created.r r }r (hj h j ubaubhN)r }r (hXZWhen fitting, the VM calculates the value of the function and derivatives for every point.r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJXZWhen fitting, the VM calculates the value of the function and derivatives for every point.r! r" }r# (hj h j ubaubeubhN)r$ }r% (hX?Defined functions can be undefined using command ``undefine``::r& h j#h&h'h-hQh/}r' (h3]h4]h2]h1]h5]uh8Mh9hh:]r( (hJX1Defined functions can be undefined using command r) r* }r+ (hX1Defined functions can be undefined using command h j$ ubj)r, }r- (hX ``undefine``h/}r. (h3]h4]h2]h1]h5]uh j$ h:]r/ hJXundefiner0 r1 }r2 (hUh j, ubah-jubhJX:r3 }r4 (hX:h j$ ubeubjs)r5 }r6 (hXundefine GaussianAreah j#h&h'h-jvh/}r7 (jxjyh1]h2]h3]h4]h5]uh8Mh9hh:]r8 hJXundefine GaussianArear9 r: }r; (hUh j5 ubaubhN)r< }r= (hXjIt is common to add own definitions to the :file:`init` file. See the section :ref:`invoking` for details.h j#h&h'h-hQh/}r> (h3]h4]h2]h1]h5]uh8Mh9hh:]r? (hJX+It is common to add own definitions to the r@ rA }rB (hX+It is common to add own definitions to the h j< ubj)rC }rD (hUh/}rE (h1]h2]h3]h4]rF XfilerG aUrolejG h5]uh j< h:]rH hJXinitrI rJ }rK (hXinith jC ubah-jubhJX file. See the section rL rM }rN (hX file. See the section h j< ubj)rO }rP (hX:ref:`invoking`rQ h j< h&h'h-jh/}rR (UreftypeXrefjjXinvokingU refdomainXstdrS h1]h2]U refexplicith3]h4]h5]jjuh8Mh:]rT j)rU }rV (hjQ h/}rW (h3]h4]rX (jjS Xstd-refrY eh2]h1]h5]uh jO h:]rZ hJXinvokingr[ r\ }r] (hUh jU ubah-jubaubhJX for details.r^ r_ }r` (hX for details.h j< ubeubh*)ra }rb (hX.. _function_cutoff:h j#h&h'h-h.h/}rc (h1]h2]h3]h4]h5]h6Ufunction-cutoffrd uh8M!h9hh:]ubeubh!)re }rf (hUh h$h&h'h(}rg hja sh-h;h/}rh (h3]h4]h2]h1]ri (Ucutoffrj jd eh5]rk (hheuh8M$h9hh@}rl jd ja sh:]rm (hC)rn }ro (hXCutoffrp h je h&h'h-hGh/}rq (h3]h4]h2]h1]h5]uh8M$h9hh:]rr hJXCutoffrs rt }ru (hjp h jn ubaubhN)rv }rw (hX:With default settings, the value of every function is calculated at every point. Peak functions, such as Gaussian, often have non-negligible values only in a small fraction of all points, so if you have many narrow peaks (like `here `_), the basic optimization is to calculate values of each peak function only near the function's center. If the option :option:`function_cutoff` is set to a non-zero value, each function is evaluated only in the range where its values are greater than the :option:`function_cutoff`.h je h&h'h-hQh/}rx (h3]h4]h2]h1]h5]uh8M&h9hh:]ry (hJXWith default settings, the value of every function is calculated at every point. Peak functions, such as Gaussian, often have non-negligible values only in a small fraction of all points, so if you have many narrow peaks (like rz r{ }r| (hXWith default settings, the value of every function is calculated at every point. Peak functions, such as Gaussian, often have non-negligible values only in a small fraction of all points, so if you have many narrow peaks (like h jv ubhW)r} }r~ (hX>`here `_h/}r (Unamehh[X4http://commons.wikimedia.org/wiki/File:Diff_NaBr.pngr h1]h2]h3]h4]h5]uh jv h:]r hJXherer r }r (hUh j} ubah-haubh*)r }r (hX7 hdKh jv h-h.h/}r (Urefurij h1]r Uherer ah2]h3]h4]h5]r hauh:]ubhJXv), the basic optimization is to calculate values of each peak function only near the function's center. If the option r r }r (hXv), the basic optimization is to calculate values of each peak function only near the function's center. If the option h jv ubj)r }r (hX:option:`function_cutoff`r h jv h&h'h-jh/}r (UreftypeXoptionjjXfunction_cutoffU refdomainXstdr h1]h2]U refexplicith3]h4]h5]jjjNuh8M&h:]r j)r }r (hj h/}r (h3]h4]r (jj X std-optionr eh2]h1]h5]uh j h:]r hJXfunction_cutoffr r }r (hUh j ubah-jubaubhJXp is set to a non-zero value, each function is evaluated only in the range where its values are greater than the r r }r (hXp is set to a non-zero value, each function is evaluated only in the range where its values are greater than the h jv ubj)r }r (hX:option:`function_cutoff`r h jv h&h'h-jh/}r (UreftypeXoptionjjXfunction_cutoffU refdomainXstdr h1]h2]U refexplicith3]h4]h5]jjjNuh8M&h:]r j)r }r (hj h/}r (h3]h4]r (jj X std-optionr eh2]h1]h5]uh j h:]r hJXfunction_cutoffr r }r (hUh j ubah-jubaubhJX.r }r (hX.h jv ubeubhN)r }r (hX?This optimization is supported only by some built-in functions.r h je h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8M1h9hh:]r hJX?This optimization is supported only by some built-in functions.r r }r (hj h j ubaubeubh"h!)r }r (hUh h$h&h'h(}r hh*)r }r (hX .. _guess:h h"h&h'h-h.h/}r (h1]h2]h3]h4]h5]h6Uguessr uh8Mh9hh:]ubsh-h;h/}r (h3]h4]h2]h1]r (Uguessing-initial-parametersr j eh5]r (hheuh8Mh9hh@}r j j sh:]r (hC)r }r (hXGuessing Initial Parametersr h j h&h'h-hGh/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r hJXGuessing Initial Parametersr r }r (hj h j ubaubhN)r }r (hXThe program can automatically set initial parameters of peaks (using peak-detection algorithm) and lines (using linear regression). Choosing initial parameters of a function by the program will be called :dfn:`guessing`.h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (hJXThe program can automatically set initial parameters of peaks (using peak-detection algorithm) and lines (using linear regression). Choosing initial parameters of a function by the program will be called r r }r (hXThe program can automatically set initial parameters of peaks (using peak-detection algorithm) and lines (using linear regression). Choosing initial parameters of a function by the program will be called h j ubh)r }r (hX:dfn:`guessing`h/}r (h3]h4]r hah2]h1]h5]uh j h:]r hJXguessingr r }r (hUh j ubah-hubhJX.r }r (hX.h j ubeubhN)r }r (hXJIt is possible to guess peak location and add it to *F* with the command::r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (hJX4It is possible to guess peak location and add it to r r }r (hX4It is possible to guess peak location and add it to h j ubh)r }r (hX*F*h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXFr }r (hUh j ubah-hubhJX with the command:r r }r (hX with the command:h j ubeubjs)r }r (hX8guess [%name =] PeakType [(initial values...)] [[x1:x2]]h j h&h'h-jvh/}r (jxjyh1]h2]h3]h4]h5]uh8Mh9hh:]r hJX8guess [%name =] PeakType [(initial values...)] [[x1:x2]]r r }r (hUh j ubaubhN)r }r (hX Examples::r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r hJX Examples:r r }r (hX Examples:h j ubaubjs)r }r (hX# add Gaussian in the given range @0: guess Gaussian [22.1:30.5] # the same, but name the new function %f1 @0: guess %f1 = Gaussian [22.1:30.5] # search for the peak in the whole dataset @0: guess Gaussian # add one Gaussian to each dataset @*: guess Gaussian # set the center and shape explicitely (determine height and width) guess PseudoVoigt(center=$ctr, shape=~0.3) [22.1:30.5]h j h&h'h-jvh/}r (jxjyh1]h2]h3]h4]h5]uh8Mh9hh:]r hJX# add Gaussian in the given range @0: guess Gaussian [22.1:30.5] # the same, but name the new function %f1 @0: guess %f1 = Gaussian [22.1:30.5] # search for the peak in the whole dataset @0: guess Gaussian # add one Gaussian to each dataset @*: guess Gaussian # set the center and shape explicitely (determine height and width) guess PseudoVoigt(center=$ctr, shape=~0.3) [22.1:30.5]r r }r (hUh j ubaubjT)r }r (hUh j h&h'h-jWh/}r (jYX-h1]h2]h3]h4]h5]uh8Mh9hh:]r (j[)r }r (hX!Name of the function is optional.r h j h&h'h-j^h/}r (h3]h4]h2]h1]h5]uh8Nh9hh:]r hN)r }r (hj h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJX!Name of the function is optional.r r }r (hj h j ubaubaubj[)r }r (hX4Some of the parameters can be specified in brackets.r h j h&h'h-j^h/}r (h3]h4]h2]h1]h5]uh8Nh9hh:]r hN)r }r (hj h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJX4Some of the parameters can be specified in brackets.r r }r! (hj h j ubaubaubj[)r" }r# (hX=If the range is omitted, the whole dataset will be searched. h j h&h'h-j^h/}r$ (h3]h4]h2]h1]h5]uh8Nh9hh:]r% hN)r& }r' (hX<If the range is omitted, the whole dataset will be searched.r( h j" h&h'h-hQh/}r) (h3]h4]h2]h1]h5]uh8Mh:]r* hJX<If the range is omitted, the whole dataset will be searched.r+ r, }r- (hj( h j& ubaubaubeubhN)r. }r/ (hXFityk offers a simple algorithm for peak-detection. It finds the highest point in the given range (``center`` and ``height``), and than tries to find the width of the peak (``hwhm``, and ``area`` = *height* × *hwhm*).h j h&h'h-hQh/}r0 (h3]h4]h2]h1]h5]uh8Mh9hh:]r1 (hJXcFityk offers a simple algorithm for peak-detection. It finds the highest point in the given range (r2 r3 }r4 (hXcFityk offers a simple algorithm for peak-detection. It finds the highest point in the given range (h j. ubj)r5 }r6 (hX ``center``h/}r7 (h3]h4]h2]h1]h5]uh j. h:]r8 hJXcenterr9 r: }r; (hUh j5 ubah-jubhJX and r< r= }r> (hX and h j. ubj)r? }r@ (hX ``height``h/}rA (h3]h4]h2]h1]h5]uh j. h:]rB hJXheightrC rD }rE (hUh j? ubah-jubhJX1), and than tries to find the width of the peak (rF rG }rH (hX1), and than tries to find the width of the peak (h j. ubj)rI }rJ (hX``hwhm``h/}rK (h3]h4]h2]h1]h5]uh j. h:]rL hJXhwhmrM rN }rO (hUh jI ubah-jubhJX, and rP rQ }rR (hX, and h j. ubj)rS }rT (hX``area``h/}rU (h3]h4]h2]h1]h5]uh j. h:]rV hJXarearW rX }rY (hUh jS ubah-jubhJX = rZ r[ }r\ (hX = h j. ubh)r] }r^ (hX*height*h/}r_ (h3]h4]h2]h1]h5]uh j. h:]r` hJXheightra rb }rc (hUh j] ubah-hubhJX × rd re }rf (hX × h j. ubh)rg }rh (hX*hwhm*h/}ri (h3]h4]h2]h1]h5]uh j. h:]rj hJXhwhmrk rl }rm (hUh jg ubah-hubhJX).rn ro }rp (hX).h j. ubeubhN)rq }rr (hX~If the highest point is at boundary of the given range, the points from the boundary to the nearest local minimum are ignored.rs h j h&h'h-hQh/}rt (h3]h4]h2]h1]h5]uh8Mh9hh:]ru hJX~If the highest point is at boundary of the given range, the points from the boundary to the nearest local minimum are ignored.rv rw }rx (hjs h jq ubaubhN)ry }rz (hXThe values of height and width found by the algorithm are multiplied by the values of options :option:`height_correction` and :option:`width_correction`, respectively. The default value for both options is 1.h j h&h'h-hQh/}r{ (h3]h4]h2]h1]h5]uh8Mh9hh:]r| (hJX^The values of height and width found by the algorithm are multiplied by the values of options r} r~ }r (hX^The values of height and width found by the algorithm are multiplied by the values of options h jy ubj)r }r (hX:option:`height_correction`r h jy h&h'h-jh/}r (UreftypeXoptionjjXheight_correctionU refdomainXstdr h1]h2]U refexplicith3]h4]h5]jjjNuh8Mh:]r j)r }r (hj h/}r (h3]h4]r (jj X std-optionr eh2]h1]h5]uh j h:]r hJXheight_correctionr r }r (hUh j ubah-jubaubhJX and r r }r (hX and h jy ubj)r }r (hX:option:`width_correction`r h jy h&h'h-jh/}r (UreftypeXoptionjjXwidth_correctionU refdomainXstdr h1]h2]U refexplicith3]h4]h5]jjjNuh8Mh:]r j)r }r (hj h/}r (h3]h4]r (jj X std-optionr eh2]h1]h5]uh j h:]r hJXwidth_correctionr r }r (hUh j ubah-jubaubhJX8, respectively. The default value for both options is 1.r r }r (hX8, respectively. The default value for both options is 1.h jy ubeubhN)r }r (hXThe linear traits ``slope`` and ``intercept`` are calculated using linear regression (without weights of points). ``avgy`` is calculated as average value of *y*.h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (hJXThe linear traits r r }r (hXThe linear traits h j ubj)r }r (hX ``slope``h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXsloper r }r (hUh j ubah-jubhJX and r r }r (hX and h j ubj)r }r (hX ``intercept``h/}r (h3]h4]h2]h1]h5]uh j h:]r hJX interceptr r }r (hUh j ubah-jubhJXE are calculated using linear regression (without weights of points). r r }r (hXE are calculated using linear regression (without weights of points). h j ubj)r }r (hX``avgy``h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXavgyr r }r (hUh j ubah-jubhJX# is calculated as average value of r r }r (hX# is calculated as average value of h j ubh)r }r (hX*y*h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXyr }r (hUh j ubah-hubhJX.r }r (hX.h j ubeubj)r }r (hXselect a function from the list of functions on the toolbar and press |add-peak-icon| to add (guess) the selected function. To choose a data range change the GUI mode to |mode-add-icon| and select the range with the right mouse button.h j h&h'h-jh/}r (h3]h4]r Uadmonition-in-the-guir ah2]h1]h5]uh8Nh9hh:]r (hC)r }r (hX In the GUIr h j h&h'h-hGh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJX In the GUIr r }r (hj h j ubaubhN)r }r (hX{select a function from the list of functions on the toolbar and press |add-peak-icon| to add (guess) the selected function.h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r (hJXFselect a function from the list of functions on the toolbar and press r r }r (hXFselect a function from the list of functions on the toolbar and press h j ubj*)r }r (hX?image:: img/add_peak_icon.png :alt: Auto Add :class: iconr h/}r (UuriXimg/add_peak_icon.pngr h1]h2]h3]h4]r Uiconr aj0}r U*j sh5]Ualtj2XAuto Addr r }r buh j h:]h-j6ubhJX& to add (guess) the selected function.r r }r (hX& to add (guess) the selected function.h j ubeubhN)r }r (hXoTo choose a data range change the GUI mode to |mode-add-icon| and select the range with the right mouse button.h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r (hJX.To choose a data range change the GUI mode to r r }r (hX.To choose a data range change the GUI mode to h j ubj*)r }r (hXDimage:: img/mode_add_icon.png :alt: Add-Peak Mode :class: iconr h/}r (UuriXimg/mode_add_icon.pngr h1]h2]h3]h4]r Uiconr aj0}r U*j sh5]Ualtj2X Add-Peak Moder r }r buh j h:]h-j6ubhJX2 and select the range with the right mouse button.r r }r (hX2 and select the range with the right mouse button.h j ubeubeubh)r }r (hXS.. |add-peak-icon| image:: img/add_peak_icon.png :alt: Auto Add :class: icon h j h&h'h-jHh/}r (h3]h4]h2]h1]h5]r X add-peak-iconr auh8Mh9hh:]r j*)r }r (hj h/}r (Uurij h1]h2]h3]h4]r j aj0}r U*j sh5]Ualtj uh j h:]h-j6ubaubh)r }r (hXY.. |mode-add-icon| image:: img/mode_add_icon.png :alt: Add-Peak Mode :class: icon h j h&h'h-jHh/}r (h3]h4]h2]h1]h5]r X mode-add-iconr auh8Mh9hh:]r j*)r }r (hj h/}r (Uurij h1]h2]h3]h4]r j aj0}r U*j sh5]Ualtj uh j h:]h-j6ubaubeubh!)r }r (hUh h$h&h'h-h;h/}r! (h3]h4]h2]h1]r" Udisplaying-informationr# ah5]r$ hauh8Mh9hh:]r% (hC)r& }r' (hXDisplaying Informationr( h j h&h'h-hGh/}r) (h3]h4]h2]h1]h5]uh8Mh9hh:]r* hJXDisplaying Informationr+ r, }r- (hj( h j& ubaubhN)r. }r/ (hXPThe ``info`` command can be show useful information when constructing the model.h j h&h'h-hQh/}r0 (h3]h4]h2]h1]h5]uh8Mh9hh:]r1 (hJXThe r2 r3 }r4 (hXThe h j. ubj)r5 }r6 (hX``info``h/}r7 (h3]h4]h2]h1]h5]uh j. h:]r8 hJXinfor9 r: }r; (hUh j5 ubah-jubhJXD command can be show useful information when constructing the model.r< r= }r> (hXD command can be show useful information when constructing the model.h j. ubeubcdocutils.nodes definition_list r? )r@ }rA (hUh j h&h'h-Udefinition_listrB h/}rC (h3]h4]h2]h1]h5]uh8Nh9hh:]rD (cdocutils.nodes definition_list_item rE )rF }rG (hX;``info types`` shows the list of available function types. h j@ h&h'h-Udefinition_list_itemrH h/}rI (h3]h4]h2]h1]h5]uh8Mh:]rJ (cdocutils.nodes term rK )rL }rM (hX``info types``rN h jF h&h'h-UtermrO h/}rP (h3]h4]h2]h1]h5]uh8Mh:]rQ j)rR }rS (hjN h/}rT (h3]h4]h2]h1]h5]uh jL h:]rU hJX info typesrV rW }rX (hUh jR ubah-jubaubcdocutils.nodes definition rY )rZ }r[ (hUh/}r\ (h3]h4]h2]h1]h5]uh jF h:]r] hN)r^ }r_ (hX+shows the list of available function types.r` h jZ h&h'h-hQh/}ra (h3]h4]h2]h1]h5]uh8Mh:]rb hJX+shows the list of available function types.rc rd }re (hj` h j^ ubaubah-U definitionrf ubeubjE )rg }rh (hXO``info FunctionType`` (e.g. ``info Pearson7``) shows the formula (definition). h j@ h&h'h-jH h/}ri (h3]h4]h2]h1]h5]uh8Mh9hh:]rj (jK )rk }rl (hX``info FunctionType``rm h jg h&h'h-jO h/}rn (h3]h4]h2]h1]h5]uh8Mh:]ro j)rp }rq (hjm h/}rr (h3]h4]h2]h1]h5]uh jk h:]rs hJXinfo FunctionTypert ru }rv (hUh jp ubah-jubaubjY )rw }rx (hUh/}ry (h3]h4]h2]h1]h5]uh jg h:]rz hN)r{ }r| (hX8(e.g. ``info Pearson7``) shows the formula (definition).h jw h&h'h-hQh/}r} (h3]h4]h2]h1]h5]uh8Mh:]r~ (hJX(e.g. r r }r (hX(e.g. h j{ ubj)r }r (hX``info Pearson7``h/}r (h3]h4]h2]h1]h5]uh j{ h:]r hJX info Pearson7r r }r (hUh j ubah-jubhJX!) shows the formula (definition).r r }r (hX!) shows the formula (definition).h j{ ubeubah-jf ubeubjE )r }r (hXN``info guess [range]`` shows where the ``guess`` command would locate a peak. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (jK )r }r (hX``info guess [range]``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8Mh:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXinfo guess [range]r r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r (hX6shows where the ``guess`` command would locate a peak.h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r (hJXshows where the r r }r (hXshows where the h j ubj)r }r (hX ``guess``h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXguessr r }r (hUh j ubah-jubhJX command would locate a peak.r r }r (hX command would locate a peak.h j ubeubah-jf ubeubjE )r }r (hX0``info functions`` lists all defined functions. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (jK )r }r (hX``info functions``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8Mh:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXinfo functionsr r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r (hXlists all defined functions.r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJXlists all defined functions.r r }r (hj h j ubaubah-jf ubeubjE )r }r (hX0``info variables`` lists all defined variables. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (jK )r }r (hX``info variables``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8Mh:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXinfo variablesr r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r (hXlists all defined variables.r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJXlists all defined variables.r r }r (hj h j ubaubah-jf ubeubjE )r }r (hX$``info F`` lists components of *F*. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (jK )r }r (hX ``info F``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8Mh:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXinfo Fr r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r (hXlists components of *F*.h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r (hJXlists components of r r }r (hXlists components of h j ubh)r }r (hX*F*h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXFr }r (hUh j ubah-hubhJX.r }r (hX.h j ubeubah-jf ubeubjE )r }r (hX$``info Z`` lists components of *Z*. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (jK )r }r (hX ``info Z``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8Mh:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXinfo Zr r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r! (hXlists components of *Z*.h j h&h'h-hQh/}r" (h3]h4]h2]h1]h5]uh8Mh:]r# (hJXlists components of r$ r% }r& (hXlists components of h j ubh)r' }r( (hX*Z*h/}r) (h3]h4]h2]h1]h5]uh j h:]r* hJXZr+ }r, (hUh j' ubah-hubhJX.r- }r. (hX.h j ubeubah-jf ubeubjE )r/ }r0 (hXJ``info formula`` shows the full mathematical formula of the fitted model. h j@ h&h'h-jH h/}r1 (h3]h4]h2]h1]h5]uh8Mh9hh:]r2 (jK )r3 }r4 (hX``info formula``r5 h j/ h&h'h-jO h/}r6 (h3]h4]h2]h1]h5]uh8Mh:]r7 j)r8 }r9 (hj5 h/}r: (h3]h4]h2]h1]h5]uh j3 h:]r; hJX info formular< r= }r> (hUh j8 ubah-jubaubjY )r? }r@ (hUh/}rA (h3]h4]h2]h1]h5]uh j/ h:]rB hN)rC }rD (hX8shows the full mathematical formula of the fitted model.rE h j? h&h'h-hQh/}rF (h3]h4]h2]h1]h5]uh8Mh:]rG hJX8shows the full mathematical formula of the fitted model.rH rI }rJ (hjE h jC ubaubah-jf ubeubjE )rK }rL (hXK``info simplified_formula`` shows the same, but the formula is simplified. h j@ h&h'h-jH h/}rM (h3]h4]h2]h1]h5]uh8Mh9hh:]rN (jK )rO }rP (hX``info simplified_formula``rQ h jK h&h'h-jO h/}rR (h3]h4]h2]h1]h5]uh8Mh:]rS j)rT }rU (hjQ h/}rV (h3]h4]h2]h1]h5]uh jO h:]rW hJXinfo simplified_formularX rY }rZ (hUh jT ubah-jubaubjY )r[ }r\ (hUh/}r] (h3]h4]h2]h1]h5]uh jK h:]r^ hN)r_ }r` (hX.shows the same, but the formula is simplified.ra h j[ h&h'h-hQh/}rb (h3]h4]h2]h1]h5]uh8Mh:]rc hJX.shows the same, but the formula is simplified.rd re }rf (hja h j_ ubaubah-jf ubeubjE )rg }rh (hX``info gnuplot_formula`` shows same as ``formula``, but the output is readable by gnuplot, e.g. ``x^2`` is replaced by ``x**2``. h j@ h&h'h-jH h/}ri (h3]h4]h2]h1]h5]uh8Mh9hh:]rj (jK )rk }rl (hX``info gnuplot_formula``rm h jg h&h'h-jO h/}rn (h3]h4]h2]h1]h5]uh8Mh:]ro j)rp }rq (hjm h/}rr (h3]h4]h2]h1]h5]uh jk h:]rs hJXinfo gnuplot_formulart ru }rv (hUh jp ubah-jubaubjY )rw }rx (hUh/}ry (h3]h4]h2]h1]h5]uh jg h:]rz hN)r{ }r| (hXhshows same as ``formula``, but the output is readable by gnuplot, e.g. ``x^2`` is replaced by ``x**2``.h jw h&h'h-hQh/}r} (h3]h4]h2]h1]h5]uh8Mh:]r~ (hJXshows same as r r }r (hXshows same as h j{ ubj)r }r (hX ``formula``h/}r (h3]h4]h2]h1]h5]uh j{ h:]r hJXformular r }r (hUh j ubah-jubhJX., but the output is readable by gnuplot, e.g. r r }r (hX., but the output is readable by gnuplot, e.g. h j{ ubj)r }r (hX``x^2``h/}r (h3]h4]h2]h1]h5]uh j{ h:]r hJXx^2r r }r (hUh j ubah-jubhJX is replaced by r r }r (hX is replaced by h j{ ubj)r }r (hX``x**2``h/}r (h3]h4]h2]h1]h5]uh j{ h:]r hJXx**2r r }r (hUh j ubah-jubhJX.r }r (hX.h j{ ubeubah-jf ubeubjE )r }r (hXX``info simplified_gnuplot_formula`` shows the simplified formula in the gnuplot format. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (jK )r }r (hX#``info simplified_gnuplot_formula``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8Mh:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXinfo simplified_gnuplot_formular r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r (hX3shows the simplified formula in the gnuplot format.r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r hJX3shows the simplified formula in the gnuplot format.r r }r (hj h j ubaubah-jf ubeubjE )r }r (hXH``info peaks`` show a formatted list of parameters of functions in *F*. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (jK )r }r (hX``info peaks``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8Mh:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJX info peaksr r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r (hX8show a formatted list of parameters of functions in *F*.h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh:]r (hJX4show a formatted list of parameters of functions in r r }r (hX4show a formatted list of parameters of functions in h j ubh)r }r (hX*F*h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXFr }r (hUh j ubah-hubhJX.r }r (hX.h j ubeubah-jf ubeubjE )r }r (hX```info peaks_err`` shows the same data, additionally including uncertainties of the parameters. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8M h9hh:]r (jK )r }r (hX``info peaks_err``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8M h:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXinfo peaks_errr r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r (hXLshows the same data, additionally including uncertainties of the parameters.r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8M h:]r hJXLshows the same data, additionally including uncertainties of the parameters.r r }r (hj h j ubaubah-jf ubeubjE )r }r (hXP``info models`` a script that reconstructs all variables, functions and models. h j@ h&h'h-jH h/}r (h3]h4]h2]h1]h5]uh8M h9hh:]r (jK )r }r (hX``info models``r h j h&h'h-jO h/}r (h3]h4]h2]h1]h5]uh8M h:]r j)r }r (hj h/}r (h3]h4]h2]h1]h5]uh j h:]r hJX info modelsr r }r (hUh j ubah-jubaubjY )r }r (hUh/}r (h3]h4]h2]h1]h5]uh j h:]r hN)r }r (hX?a script that reconstructs all variables, functions and models.r h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8M h:]r hJX?a script that reconstructs all variables, functions and models.r r }r (hj h j ubaubah-jf ubeubeubhN)r }r (hXQThe last two commands are often redirected to a file (``info peaks > filename``).h j h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8Mh9hh:]r (hJX6The last two commands are often redirected to a file (r r }r (hX6The last two commands are often redirected to a file (h j ubj)r }r (hX``info peaks > filename``h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXinfo peaks > filenamer! r" }r# (hUh j ubah-jubhJX).r$ r% }r& (hX).h j ubeubhN)r' }r( (hXDThe complete list of ``info`` arguments can be found in :ref:`info`.r) h j h&h'h-hQh/}r* (h3]h4]h2]h1]h5]uh8Mh9hh:]r+ (hJXThe complete list of r, r- }r. (hXThe complete list of h j' ubj)r/ }r0 (hX``info``h/}r1 (h3]h4]h2]h1]h5]uh j' h:]r2 hJXinfor3 r4 }r5 (hUh j/ ubah-jubhJX arguments can be found in r6 r7 }r8 (hX arguments can be found in h j' ubj)r9 }r: (hX :ref:`info`r; h j' h&h'h-jh/}r< (UreftypeXrefjjXinfoU refdomainXstdr= h1]h2]U refexplicith3]h4]h5]jjuh8Mh:]r> j)r? }r@ (hj; h/}rA (h3]h4]rB (jj= Xstd-refrC eh2]h1]h5]uh j9 h:]rD hJXinforE rF }rG (hUh j? ubah-jubaubhJX.rH }rI (hX.h j' ubeubj)rJ }rK (hX5most of the above commands has clickable equivalents.rL h j h&h'h-jh/}rM (h3]h4]rN Uadmonition-in-the-guirO ah2]h1]h5]uh8Nh9hh:]rP (hC)rQ }rR (hX In the GUIrS h jJ h&h'h-hGh/}rT (h3]h4]h2]h1]h5]uh8Mh:]rU hJX In the GUIrV rW }rX (hjS h jQ ubaubhN)rY }rZ (hjL h jJ h&h'h-hQh/}r[ (h3]h4]h2]h1]h5]uh8Mh:]r\ hJX5most of the above commands has clickable equivalents.r] r^ }r_ (hjL h jY ubaubeubeubeubh&h'h-h;h/}r` (h3]h4]h2]h1]ra U model-f-and-zrb ah5]rc hauh8M4h9hh:]rd (hC)re }rf (hXModel, F and Zrg h h"h&h'h-hGh/}rh (h3]h4]h2]h1]h5]uh8M4h9hh:]ri hJXModel, F and Zrj rk }rl (hjg h je ubaubhN)rm }rn (hXAs already discussed, each dataset has a separate model that can be fitted to the data. As can be seen from the :ref:`formula ` at the beginning of this chapter, the model is defined as a set functions :math:`f_i` and a set of functions :math:`z_i`. These sets are named *F* and *Z* respectively. The model is constructed by specifying names of functions in these two sets.h h"h&h'h-hQh/}ro (h3]h4]h2]h1]h5]uh8M6h9hh:]rp (hJXpAs already discussed, each dataset has a separate model that can be fitted to the data. As can be seen from the rq rr }rs (hXpAs already discussed, each dataset has a separate model that can be fitted to the data. As can be seen from the h jm ubj)rt }ru (hX:ref:`formula `rv h jm h&h'h-jh/}rw (UreftypeXrefjjX model_formulaU refdomainXstdrx h1]h2]U refexplicith3]h4]h5]jjuh8M6h:]ry j)rz }r{ (hjv h/}r| (h3]h4]r} (jjx Xstd-refr~ eh2]h1]h5]uh jt h:]r hJXformular r }r (hUh jz ubah-jubaubhJXK at the beginning of this chapter, the model is defined as a set functions r r }r (hXK at the beginning of this chapter, the model is defined as a set functions h jm ubh)r }r (hUh/}r (UlatexXf_ih1]h2]h3]h4]h5]uh jm h:]h-hubhJX and a set of functions r r }r (hX and a set of functions h jm ubh)r }r (hUh/}r (UlatexXz_ih1]h2]h3]h4]h5]uh jm h:]h-hubhJX. These sets are named r r }r (hX. These sets are named h jm ubh)r }r (hX*F*h/}r (h3]h4]h2]h1]h5]uh jm h:]r hJXFr }r (hUh j ubah-hubhJX and r r }r (hX and h jm ubh)r }r (hX*Z*h/}r (h3]h4]h2]h1]h5]uh jm h:]r hJXZr }r (hUh j ubah-hubhJX[ respectively. The model is constructed by specifying names of functions in these two sets.r r }r (hX[ respectively. The model is constructed by specifying names of functions in these two sets.h jm ubeubhN)r }r (hXhIn many cases :dfn:`x-correction` Z is not used. The fitted curve is thus the sum of all functions in F.h h"h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8M>h9hh:]r (hJXIn many cases r r }r (hXIn many cases h j ubh)r }r (hX:dfn:`x-correction`h/}r (h3]h4]r hah2]h1]h5]uh j h:]r hJX x-correctionr r }r (hUh j ubah-hubhJXG Z is not used. The fitted curve is thus the sum of all functions in F.r r }r (hXG Z is not used. The fitted curve is thus the sum of all functions in F.h j ubeubhN)r }r (hX Command::r h h"h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8MAh9hh:]r hJXCommand:r r }r (hXCommand:h j ubaubjs)r }r (hXF += %functionh h"h&h'h-jvh/}r (jxjyh1]h2]h3]h4]h5]uh8MCh9hh:]r hJXF += %functionr r }r (hUh j ubaubhN)r }r (hXadds *%function* to F, andr h h"h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8MEh9hh:]r (hJXadds r r }r (hXadds h j ubh)r }r (hX *%function*h/}r (h3]h4]h2]h1]h5]uh j h:]r hJX %functionr r }r (hUh j ubah-hubhJX to F, andr r }r (hX to F, andh j ubeubjs)r }r (hXZ += %functionh h"h&h'h-jvh/}r (jxjyh1]h2]h3]h4]h5]uh8MIh9hh:]r hJXZ += %functionr r }r (hUh j ubaubhN)r }r (hXadds *%function* to Z.r h h"h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8MKh9hh:]r (hJXadds r r }r (hXadds h j ubh)r }r (hX *%function*h/}r (h3]h4]h2]h1]h5]uh j h:]r hJX %functionr r }r (hUh j ubah-hubhJX to Z.r r }r (hX to Z.h j ubeubhN)r }r (hXA few examples::r h h"h&h'h-hQh/}r (h3]h4]h2]h1]h5]uh8MMh9hh:]r hJXA few examples:r r }r (hXA few examples:h j ubaubjs)r }r (hXW# create and add function to F %g = Gaussian(height=~66254., hwhm=~0.264, center=~24.7) F += %g # create unnamed function and add it to F F += Gaussian(height=~66254., hwhm=~0.264, center=~24.7) # clear F F = 0 # clear F and put three functions in it F = %a + %b + %c # show info about the first and the last function in F info F[0], F[-1]h h"h&h'h-jvh/}r (jxjyh1]h2]h3]h4]h5]uh8MOh9hh:]r hJXW# create and add function to F %g = Gaussian(height=~66254., hwhm=~0.264, center=~24.7) F += %g # create unnamed function and add it to F F += Gaussian(height=~66254., hwhm=~0.264, center=~24.7) # clear F F = 0 # clear F and put three functions in it F = %a + %b + %c # show info about the first and the last function in F info F[0], F[-1]r r }r (hUh j ubaubhN)r }r(hXLThe next sections shows an easier way to add a function (command ``guess``).rh h"h&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8M_h9hh:]r(hJXAThe next sections shows an easier way to add a function (command rr}r(hXAThe next sections shows an easier way to add a function (command h j ubj)r}r(hX ``guess``h/}r (h3]h4]h2]h1]h5]uh j h:]r hJXguessr r }r (hUh jubah-jubhJX).rr}r(hX).h j ubeubhN)r}r(hXcIf there is more than one dataset, F and Z can be prefixed with the dataset number (e.g. ``@1.F``).h h"h&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mah9hh:]r(hJXYIf there is more than one dataset, F and Z can be prefixed with the dataset number (e.g. rr}r(hXYIf there is more than one dataset, F and Z can be prefixed with the dataset number (e.g. h jubj)r}r(hX``@1.F``h/}r(h3]h4]h2]h1]h5]uh jh:]rhJX@1.Frr}r(hUh jubah-jubhJX).rr }r!(hX).h jubeubhN)r"}r#(hXbThe model can be copied. To copy the model from ``@0`` to ``@1`` we type one of the two commands::h h"h&h'h-hQh/}r$(h3]h4]h2]h1]h5]uh8Mdh9hh:]r%(hJX0The model can be copied. To copy the model from r&r'}r((hX0The model can be copied. To copy the model from h j"ubj)r)}r*(hX``@0``h/}r+(h3]h4]h2]h1]h5]uh j"h:]r,hJX@0r-r.}r/(hUh j)ubah-jubhJX to r0r1}r2(hX to h j"ubj)r3}r4(hX``@1``h/}r5(h3]h4]h2]h1]h5]uh j"h:]r6hJX@1r7r8}r9(hUh j3ubah-jubhJX! we type one of the two commands:r:r;}r<(hX! we type one of the two commands:h j"ubeubjs)r=}r>(hX@@1.F = @0.F # shallow copy @1.F = copy(@0.F) # deep copyh h"h&h'h-jvh/}r?(jxjyh1]h2]h3]h4]h5]uh8Mgh9hh:]r@hJX@@1.F = @0.F # shallow copy @1.F = copy(@0.F) # deep copyrArB}rC(hUh j=ubaubhN)rD}rE(hXThe former command uses the same functions in both models: if you shift a peak in ``@1``, it will be also shifted in ``@0``. The latter command (deep copy) duplicates all functions and variables and makes an independent model.h h"h&h'h-hQh/}rF(h3]h4]h2]h1]h5]uh8Mjh9hh:]rG(hJXRThe former command uses the same functions in both models: if you shift a peak in rHrI}rJ(hXRThe former command uses the same functions in both models: if you shift a peak in h jDubj)rK}rL(hX``@1``h/}rM(h3]h4]h2]h1]h5]uh jDh:]rNhJX@1rOrP}rQ(hUh jKubah-jubhJX, it will be also shifted in rRrS}rT(hX, it will be also shifted in h jDubj)rU}rV(hX``@0``h/}rW(h3]h4]h2]h1]h5]uh jDh:]rXhJX@0rYrZ}r[(hUh jUubah-jubhJXg. The latter command (deep copy) duplicates all functions and variables and makes an independent model.r\r]}r^(hXg. The latter command (deep copy) duplicates all functions and variables and makes an independent model.h jDubeubj)r_}r`(hXDclick the button |copyfunc-icon| on the sidebar to make a deep copy.rah h"h&h'h-jh/}rb(h3]h4]rcUadmonition-in-the-guirdah2]h1]h5]uh8Nh9hh:]re(hC)rf}rg(hX In the GUIrhh j_h&h'h-hGh/}ri(h3]h4]h2]h1]h5]uh8Moh:]rjhJX In the GUIrkrl}rm(hjhh jfubaubhN)rn}ro(hjah j_h&h'h-hQh/}rp(h3]h4]h2]h1]h5]uh8Mqh:]rq(hJXclick the button rrrs}rt(hXclick the button h jnubj*)ru}rv(hXAimage:: img/copyfunc_icon.png :alt: Copy-Model :class: iconrwh/}rx(UuriXimg/copyfunc_icon.pngryh1]h2]h3]h4]rzUiconr{aj0}r|U*jysh5]Ualtj2X Copy-Modelr}r~}rbuh jnh:]h-j6ubhJX$ on the sidebar to make a deep copy.rr}r(hX$ on the sidebar to make a deep copy.h jnubeubeubhhN)r}r(hXIt is often required to keep the width or shape of peaks constant for all peaks in the dataset. To change the variables bound to parameters with a given name for all functions in F, use the command::h h"h&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mwh9hh:]rhJXIt is often required to keep the width or shape of peaks constant for all peaks in the dataset. To change the variables bound to parameters with a given name for all functions in F, use the command:rr}r(hXIt is often required to keep the width or shape of peaks constant for all peaks in the dataset. To change the variables bound to parameters with a given name for all functions in F, use the command:h jubaubjs)r}r(hXF[*].param = variableh h"h&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8M{h9hh:]rhJXF[*].param = variablerr}r(hUh jubaubhN)r}r(hX Examples::rh h"h&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8M}h9hh:]rhJX Examples:rr}r(hX Examples:h jubaubjs)r}r(hX# Set hwhm of all functions in F that have a parameter hwhm to $foo # (hwhm here means half-width-at-half-maximum) F[*].hwhm = $foo # Bound the variable used for the shape of peak %_1 to shapes of all # functions in F F[*].shape = %_1.shape # Create a new simple-variable for each function in F and bound the # variable to parameter hwhm. All hwhm parameters will be independent. F[*].hwhm = ~0.2h h"h&h'h-jvh/}r(jxjyh1]h2]h3]h4]h5]uh8Mh9hh:]rhJX# Set hwhm of all functions in F that have a parameter hwhm to $foo # (hwhm here means half-width-at-half-maximum) F[*].hwhm = $foo # Bound the variable used for the shape of peak %_1 to shapes of all # functions in F F[*].shape = %_1.shape # Create a new simple-variable for each function in F and bound the # variable to parameter hwhm. All hwhm parameters will be independent. F[*].hwhm = ~0.2rr}r(hUh jubaubj)r}r(hXbuttons |same-hwhm-icon| and |same-shape-icon| on the sidebar make, respectively, the HWHM and shape of all functions the same. Pressing the buttons again will make all the parameters independent.h h"h&h'h-jh/}r(h3]h4]rUadmonition-in-the-guirah2]h1]h5]uh8Nh9hh:]r(hC)r}r(hX In the GUIrh jh&h'h-hGh/}r(h3]h4]h2]h1]h5]uh8Mh:]rhJX In the GUIrr}r(hjh jubaubhN)r}r(hXbuttons |same-hwhm-icon| and |same-shape-icon| on the sidebar make, respectively, the HWHM and shape of all functions the same. Pressing the buttons again will make all the parameters independent.h jh&h'h-hQh/}r(h3]h4]h2]h1]h5]uh8Mh:]r(hJXbuttons rr}r(hXbuttons h jubj*)r}r(hX8image:: img/eq_fwhm_icon.png :alt: =W :class: iconrh/}r(UuriXimg/eq_fwhm_icon.pngrh1]h2]h3]h4]rUiconraj0}rU*jsh5]Ualtj2X=Wrr}rbuh jh:]h-j6ubhJX and rr}r(hX and h jubj*)r}r(hX9image:: img/eq_shape_icon.png :alt: =S :class: iconrh/}r(UuriXimg/eq_shape_icon.pngrh1]h2]h3]h4]rUiconraj0}rU*jsh5]Ualtj2X=Srr}rbuh jh:]h-j6ubhJX on the sidebar make, respectively, the HWHM and shape of all functions the same. Pressing the buttons again will make all the parameters independent.rr}r(hX on the sidebar make, respectively, the HWHM and shape of all functions the same. Pressing the buttons again will make all the parameters independent.h jubeubeubh)r}r(hXM.. |same-hwhm-icon| image:: img/eq_fwhm_icon.png :alt: =W :class: icon h h"h&h'h-jHh/}r(h3]h4]h2]h1]h5]rXsame-hwhm-iconrauh8Mh9hh:]rj*)r}r(hjh/}r(Uurijh1]h2]h3]h4]rjaj0}rU*jsh5]Ualtjuh jh:]h-j6ubaubh)r}r(hXO.. |same-shape-icon| image:: img/eq_shape_icon.png :alt: =S :class: icon h h"h&h'h-jHh/}r(h3]h4]h2]h1]h5]rXsame-shape-iconrauh8Mh9hh:]rj*)r}r(hjh/}r(Uurijh1]h2]h3]h4]rjaj0}rU*jsh5]Ualtjuh jh:]h-j6ubaubj eubh&h'h-jHh/}r(h3]h4]h2]h1]h5]rhauh8Msh9hh:]rj*)r}r(hjwh/}r(Uurijyh1]h2]h3]h4]rj{aj0}rU*jysh5]Ualtj~uh hh:]h-j6ubaubjUjQjjjKjFj j j j jjuUparse_messagesr]rcdocutils.nodes system_message r)r}r(hUh jYh&h'h-Usystem_messagerh/}r(h3]UlevelKh1]h2]rj`aUsourceh'h4]h5]UlineKCUtypeUINFOruh8KCh9hh:]rhN)r}r(hUh/}r(h3]h4]h2]h1]h5]uh jh:]rhJX,Duplicate implicit target name: "variables".rr}r(hUh jubah-hQubaubaUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r(hj hjj hhgh jh jh jh h>h jXhjhj hjhj(hj"hjb hh7hj hjhj# hjd uh:]r(h+h$ehUU transformerrNU footnote_refsr}rUrefnamesr }r Usymbol_footnotesr ]r Uautofootnote_refsr ]rUsymbol_footnote_refsr]rU citationsr]rh9hU current_linerNUtransform_messagesr]r(j)r}r(hUh/}r(h3]UlevelKh1]h2]Usourceh'h4]h5]UlineKUtypejuh:]rhN)r}r(hUh/}r(h3]h4]h2]h1]h5]uh jh:]rhJX+Hyperlink target "model" is not referenced.rr}r (hUh jubah-hQubah-jubj)r!}r"(hUh/}r#(h3]UlevelKh1]h2]Usourceh'h4]h5]UlineK2Utypejuh:]r$hN)r%}r&(hUh/}r'(h3]h4]h2]h1]h5]uh j!h:]r(hJX3Hyperlink target "model-formula" is not referenced.r)r*}r+(hUh j%ubah-hQubah-jubj)r,}r-(hUh/}r.(h3]UlevelKh1]h2]Usourceh'h4]h5]UlineK@Utypejuh:]r/hN)r0}r1(hUh/}r2(h3]h4]h2]h1]h5]uh j,h:]r3hJX/Hyperlink target "variables" is not referenced.r4r5}r6(hUh j0ubah-hQubah-jubj)r7}r8(hUh/}r9(h3]UlevelKh1]h2]Usourceh'h4]h5]UlineKUtypejuh:]r:hN)r;}r<(hUh/}r=(h3]h4]h2]h1]h5]uh j7h:]r>hJX,Hyperlink target "domain" is not referenced.r?r@}rA(hUh j;ubah-hQubah-jubj)rB}rC(hUh/}rD(h3]UlevelKh1]h2]Usourceh'h4]h5]UlineKUtypejuh:]rEhN)rF}rG(hUh/}rH(h3]h4]h2]h1]h5]uh jBh:]rIhJX+Hyperlink target "flist" is not referenced.rJrK}rL(hUh jFubah-hQubah-jubj)rM}rN(hUh/}rO(h3]UlevelKh1]h2]Usourceh'h4]h5]UlineMUtypejuh:]rPhN)rQ}rR(hUh/}rS(h3]h4]h2]h1]h5]uh jMh:]rThJX)Hyperlink target "udf" is not referenced.rUrV}rW(hUh jQubah-hQubah-jubj)rX}rY(hUh/}rZ(h3]UlevelKh1]h2]Usourceh'h4]h5]UlineM!Utypejuh:]r[hN)r\}r](hUh/}r^(h3]h4]h2]h1]h5]uh jXh:]r_hJX5Hyperlink target "function-cutoff" is not referenced.r`ra}rb(hUh j\ubah-hQubah-jubj)rc}rd(hUh/}re(h3]UlevelKh1]h2]Usourceh'h4]h5]UlineMUtypejuh:]rfhN)rg}rh(hUh/}ri(h3]h4]h2]h1]h5]uh jch:]rjhJX+Hyperlink target "guess" is not referenced.rkrl}rm(hUh jgubah-hQubah-jubeUreporterrnNUid_startroKU autofootnotesrp]rqU citation_refsrr}rsUindirect_targetsrt]ruUsettingsrv(cdocutils.frontend Values rworx}ry(Ufootnote_backlinksrzKUrecord_dependenciesr{NU rfc_base_urlr|Uhttps://tools.ietf.org/html/r}U tracebackr~Upep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhGNUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrUutf-8rU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUasciirU_sourcerh'Ugettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrU https://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(jd je jjjjjjjj je h>h$hghbjXjYj'j#j j j j j`jYjjj(j#j"j#jjj j h7h$jjjb h"j# j uUsubstitution_namesr}r(hhjUjUjjjKjKj j j j jjuh-h9h/}r(h3]h1]h2]Usourceh'h4]h5]uU footnotesr]rUrefidsr}r(jd ]rja aj]rjaj]rjajX]rjUaj ]rj aj]rjaj"]rjah7]rh+auub.PKF"fityk-v1.2.1/.doctrees/fit.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xuncertainty of parametersqNXnumerical recipesqX nonlinearqXnelderq Xfitq Xmpfitq X curve fittingq NX gsl manualq Xnonlinear optimizationqNXgenetic algorithmsqNXlevmarqXfitting related commandsqNX fitting_cmdqXnelder-mead downhill simplexqNXlevenberg-marquardtqNuUsubstitution_defsq}qXlambdaqcdocutils.nodes substitution_definition q)q}q(U rawsourceqX.. |lambda| replace:: *λ* Uparentqcdocutils.nodes section q)q}q(hUhh)q }q!(hUhhUsourceq"X9/var/build/user_builds/fityk/checkouts/v1.2.1/doc/fit.rstq#Uexpect_referenced_by_nameq$}q%h cdocutils.nodes target q&)q'}q((hX.. _fit:hhh"h#Utagnameq)Utargetq*U attributesq+}q,(Uidsq-]Ubackrefsq.]Udupnamesq/]Uclassesq0]Unamesq1]Urefidq2Ufitq3uUlineq4KUdocumentq5hUchildrenq6]ubsh)Usectionq7h+}q8(h/]h0]h.]h-]q9(U curve-fittingq:h3eh1]q;(h h euh4Kh5hUexpect_referenced_by_idq<}q=h3h'sh6]q>(cdocutils.nodes title q?)q@}qA(hX Curve FittingqBhh h"h#h)UtitleqCh+}qD(h/]h0]h.]h-]h1]uh4Kh5hh6]qEcdocutils.nodes Text qFX Curve FittingqGqH}qI(hhBhh@ubaubh&)qJ}qK(hX.. _nonlinear:hh h"h#h)h*h+}qL(h-]h.]h/]h0]h1]h2U nonlinearqMuh4Kh5hh6]ubh)qN}qO(hUhh h"h#h$}qPhhJsh)h7h+}qQ(h/]h0]h.]h-]qR(Unonlinear-optimizationqShMeh1]qT(hheuh4K h5hh<}qUhMhJsh6]qV(h?)qW}qX(hXNonlinear OptimizationqYhhNh"h#h)hCh+}qZ(h/]h0]h.]h-]h1]uh4K h5hh6]q[hFXNonlinear Optimizationq\q]}q^(hhYhhWubaubcdocutils.nodes paragraph q_)q`}qa(hXThis is the core. We have a set of observations (data points), to which we want to fit a *model* that depends on adjustable parameters. Let me quote `Numerical Recipes `_, chapter 15.0, page 656):hhNh"h#h)U paragraphqbh+}qc(h/]h0]h.]h-]h1]uh4K h5hh6]qd(hFXYThis is the core. We have a set of observations (data points), to which we want to fit a qeqf}qg(hXYThis is the core. We have a set of observations (data points), to which we want to fit a hh`ubcdocutils.nodes emphasis qh)qi}qj(hX*model*h+}qk(h/]h0]h.]h-]h1]uhh`h6]qlhFXmodelqmqn}qo(hUhhiubah)UemphasisqpubhFX5 that depends on adjustable parameters. Let me quote qqqr}qs(hX5 that depends on adjustable parameters. Let me quote hh`ubcdocutils.nodes reference qt)qu}qv(hX;`Numerical Recipes `_h+}qw(UnameXNumerical RecipesUrefuriqxX$http://www.nrbook.com/a/bookcpdf.phpqyh-]h.]h/]h0]h1]uhh`h6]qzhFXNumerical Recipesq{q|}q}(hUhhuubah)U referenceq~ubh&)q}q(hX' U referencedqKhh`h)h*h+}q(Urefurihyh-]qUnumerical-recipesqah.]h/]h0]h1]qhauh6]ubhFX, chapter 15.0, page 656):qq}q(hX, chapter 15.0, page 656):hh`ubeubcdocutils.nodes block_quote q)q}q(hUhhNh"h#h)U block_quoteqh+}q(h/]h0]h.]h-]h1]uh4Nh5hh6]qh_)q}q(hXRThe basic approach in all cases is usually the same: You choose or design a figure-of-merit function (merit function, for short) that measures the agreement between the data and the model with a particular choice of parameters. The merit function is conventionally arranged so that small values represent close agreement. The parameters of the model are then adjusted to achieve a minimum in the merit function, yielding best-fit parameters. The adjustment process is thus a problem in minimization in many dimensions. \[...] however, there exist special, more efficient, methods that are specific to modeling, and we will discuss these in this chapter. There are important issues that go beyond the mere finding of best-fit parameters. Data are generally not exact. They are subject to measurement errors (called noise in the context of signal-processing). Thus, typical data never exactly fit the model that is being used, even when that model is correct. We need the means to assess whether or not the model is appropriate, that is, we need to test the goodness-of-fit against some useful statistical standard. We usually also need to know the accuracy with which parameters are determined by the data set. In other words, we need to know the likely errors of the best-fit parameters. Finally, it is not uncommon in fitting data to discover that the merit function is not unimodal, with a single minimum. In some cases, we may be interested in global rather than local questions. Not, "how good is this fit?" but rather, "how sure am I that there is not a very much better fit in some corner of parameter space?"hhh"h#h)hbh+}q(h/]h0]h.]h-]h1]uh4Kh6]qhFXQThe basic approach in all cases is usually the same: You choose or design a figure-of-merit function (merit function, for short) that measures the agreement between the data and the model with a particular choice of parameters. The merit function is conventionally arranged so that small values represent close agreement. The parameters of the model are then adjusted to achieve a minimum in the merit function, yielding best-fit parameters. The adjustment process is thus a problem in minimization in many dimensions. [...] however, there exist special, more efficient, methods that are specific to modeling, and we will discuss these in this chapter. There are important issues that go beyond the mere finding of best-fit parameters. Data are generally not exact. They are subject to measurement errors (called noise in the context of signal-processing). Thus, typical data never exactly fit the model that is being used, even when that model is correct. We need the means to assess whether or not the model is appropriate, that is, we need to test the goodness-of-fit against some useful statistical standard. We usually also need to know the accuracy with which parameters are determined by the data set. In other words, we need to know the likely errors of the best-fit parameters. Finally, it is not uncommon in fitting data to discover that the merit function is not unimodal, with a single minimum. In some cases, we may be interested in global rather than local questions. Not, "how good is this fit?" but rather, "how sure am I that there is not a very much better fit in some corner of parameter space?"qq}q(hXRThe basic approach in all cases is usually the same: You choose or design a figure-of-merit function (merit function, for short) that measures the agreement between the data and the model with a particular choice of parameters. The merit function is conventionally arranged so that small values represent close agreement. The parameters of the model are then adjusted to achieve a minimum in the merit function, yielding best-fit parameters. The adjustment process is thus a problem in minimization in many dimensions. \[...] however, there exist special, more efficient, methods that are specific to modeling, and we will discuss these in this chapter. There are important issues that go beyond the mere finding of best-fit parameters. Data are generally not exact. They are subject to measurement errors (called noise in the context of signal-processing). Thus, typical data never exactly fit the model that is being used, even when that model is correct. We need the means to assess whether or not the model is appropriate, that is, we need to test the goodness-of-fit against some useful statistical standard. We usually also need to know the accuracy with which parameters are determined by the data set. In other words, we need to know the likely errors of the best-fit parameters. Finally, it is not uncommon in fitting data to discover that the merit function is not unimodal, with a single minimum. In some cases, we may be interested in global rather than local questions. Not, "how good is this fit?" but rather, "how sure am I that there is not a very much better fit in some corner of parameter space?"hhubaubaubh_)q}q(hX^Our function of merit is the weighted sum of squared residuals (WSSR), also called chi-square:qhhNh"h#h)hbh+}q(h/]h0]h.]h-]h1]uh4K)h5hh6]qhFX^Our function of merit is the weighted sum of squared residuals (WSSR), also called chi-square:qq}q(hhhhubaubcsphinx.ext.mathbase displaymath q)q}q(hUhhNh"h#h)U displaymathqh+}q(UlatexqX\chi^{2}(\mathbf{a}) =\sum_{i=1}^{N} \left[\frac{y_i-y(x_i;\mathbf{a})}{\sigma_i}\right]^{2} =\sum_{i=1}^{N} w_{i}\left[y_{i}-y(x_{i};\mathbf{a})\right]^{2} Unowrapqh-]h.]h/]h0]h1]UdocnameqXfitqUlabelqNuh4K,h5hh6]ubh_)q}q(hXWeights are based on standard deviations, :math:`w_i=1/\sigma_i^2`. You can learn why squares of residuals are minimized e.g. from chapter 15.1 of *Numerical Recipes*.hhNh"h#h)hbh+}q(h/]h0]h.]h-]h1]uh4K1h5hh6]q(hFX*Weights are based on standard deviations, qq}q(hX*Weights are based on standard deviations, hhubcsphinx.ext.mathbase math q)q}q(hUh+}q(UlatexXw_i=1/\sigma_i^2h-]h.]h/]h0]h1]uhhh6]h)UmathqubhFXQ. You can learn why squares of residuals are minimized e.g. from chapter 15.1 of qq}q(hXQ. You can learn why squares of residuals are minimized e.g. from chapter 15.1 of hhubhh)q}q(hX*Numerical Recipes*h+}q(h/]h0]h.]h-]h1]uhhh6]qhFXNumerical Recipesqq}q(hUhhubah)hpubhFX.q}q(hX.hhubeubh_)q}q(hX@So we are looking for a global minimum of :math:`\chi^2`. This field of numerical research (looking for a minimum or maximum) is usually called optimization; it is non-linear and global optimization. Fityk implements three very different optimization methods. All are well-known and described in many standard textbooks.hhNh"h#h)hbh+}q(h/]h0]h.]h-]h1]uh4K5h5hh6]q(hFX*So we are looking for a global minimum of qąq}q(hX*So we are looking for a global minimum of hhubh)q}q(hUh+}q(UlatexX\chi^2h-]h.]h/]h0]h1]uhhh6]h)hubhFX. This field of numerical research (looking for a minimum or maximum) is usually called optimization; it is non-linear and global optimization. Fityk implements three very different optimization methods. All are well-known and described in many standard textbooks.qʅq}q(hX. This field of numerical research (looking for a minimum or maximum) is usually called optimization; it is non-linear and global optimization. Fityk implements three very different optimization methods. All are well-known and described in many standard textbooks.hhubeubh_)q}q(hXxThe standard deviations of the best-fit parameters are given by the square root of the corresponding diagonal elements of the covariance matrix. The covariance matrix is based on standard deviations of data points. Formulae can be found e.g. in `GSL Manual `_, chapter *Least-Squares Fitting. Fitting Overview* (weighted data version).hhNh"h#h)hbh+}q(h/]h0]h.]h-]h1]uh4K;h5hh6]q(hFXThe standard deviations of the best-fit parameters are given by the square root of the corresponding diagonal elements of the covariance matrix. The covariance matrix is based on standard deviations of data points. Formulae can be found e.g. in qхq}q(hXThe standard deviations of the best-fit parameters are given by the square root of the corresponding diagonal elements of the covariance matrix. The covariance matrix is based on standard deviations of data points. Formulae can be found e.g. in hhubht)q}q(hX7`GSL Manual `_h+}q(UnameX GSL ManualhxX'http://www.gnu.org/software/gsl/manual/qh-]h.]h/]h0]h1]uhhh6]qhFX GSL Manualqمq}q(hUhhubah)h~ubh&)q}q(hX* hKhhh)h*h+}q(Urefurihh-]qU gsl-manualqah.]h/]h0]h1]qh auh6]ubhFX , chapter q⅁q}q(hX , chapter hhubhh)q}q(hX)*Least-Squares Fitting. Fitting Overview*h+}q(h/]h0]h.]h-]h1]uhhh6]qhFX'Least-Squares Fitting. Fitting Overviewq酁q}q(hUhhubah)hpubhFX (weighted data version).q셁q}q(hX (weighted data version).hhubeubh&)q}q(hX.. _fitting_cmd:hhNh"h#h)h*h+}q(h-]h.]h/]h0]h1]h2U fitting-cmdquh4KBh5hh6]ubeubh)q}q(hUhh h"h#h$}qhhsh)h7h+}q(h/]h0]h.]h-]q(Ufitting-related-commandsqheh1]q(hheuh4KEh5hh<}qhhsh6]q(h?)q}q(hXFitting Related Commandsqhhh"h#h)hCh+}q(h/]h0]h.]h-]h1]uh4KEh5hh6]rhFXFitting Related Commandsrr}r(hhhhubaubh_)r}r(hX!To fit model to data, use commandrhhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4KGh5hh6]rhFX!To fit model to data, use commandr r }r (hjhjubaubh_)r }r (hX'fit [+] [number-of-iterations] [@n ...]rhhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4KIh5hh6]rhFX'fit [+] [number-of-iterations] [@n ...]rr}r(hjhj ubaubh_)r}r(hXThe plus sign (+) prevents initialization of the fitting method. It is used to continue the previous fitting where it left off (if the previous fitting was stopped before it converged).rhhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4KKh5hh6]rhFXThe plus sign (+) prevents initialization of the fitting method. It is used to continue the previous fitting where it left off (if the previous fitting was stopped before it converged).rr}r(hjhjubaubh_)r}r(hXAll non-linear fitting methods are iterative. *number-of-iterations* is the maximum number of iterations. There are also other stopping criteria, so the number of executed iterations can be smaller.hhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4KOh5hh6]r(hFX.All non-linear fitting methods are iterative. r r!}r"(hX.All non-linear fitting methods are iterative. hjubhh)r#}r$(hX*number-of-iterations*h+}r%(h/]h0]h.]h-]h1]uhjh6]r&hFXnumber-of-iterationsr'r(}r)(hUhj#ubah)hpubhFX is the maximum number of iterations. There are also other stopping criteria, so the number of executed iterations can be smaller.r*r+}r,(hX is the maximum number of iterations. There are also other stopping criteria, so the number of executed iterations can be smaller.hjubeubh_)r-}r.(hXLike with all commands, the generic dataset specification (``@n: fit``) can be used, but in special cases the datasets can be given at the end of the command. The difference is that ``fit @*`` fits all datasets simultaneously, while ``@*: fit`` fits all datasets one by one, separately.hhh"h#h)hbh+}r/(h/]h0]h.]h-]h1]uh4KTh5hh6]r0(hFX;Like with all commands, the generic dataset specification (r1r2}r3(hX;Like with all commands, the generic dataset specification (hj-ubcdocutils.nodes literal r4)r5}r6(hX ``@n: fit``h+}r7(h/]h0]h.]h-]h1]uhj-h6]r8hFX@n: fitr9r:}r;(hUhj5ubah)Uliteralr<ubhFXp) can be used, but in special cases the datasets can be given at the end of the command. The difference is that r=r>}r?(hXp) can be used, but in special cases the datasets can be given at the end of the command. The difference is that hj-ubj4)r@}rA(hX ``fit @*``h+}rB(h/]h0]h.]h-]h1]uhj-h6]rChFXfit @*rDrE}rF(hUhj@ubah)j<ubhFX) fits all datasets simultaneously, while rGrH}rI(hX) fits all datasets simultaneously, while hj-ubj4)rJ}rK(hX ``@*: fit``h+}rL(h/]h0]h.]h-]h1]uhj-h6]rMhFX@*: fitrNrO}rP(hUhjJubah)j<ubhFX* fits all datasets one by one, separately.rQrR}rS(hX* fits all datasets one by one, separately.hj-ubeubh_)rT}rU(hX5The fitting method can be set using the set command::rVhhh"h#h)hbh+}rW(h/]h0]h.]h-]h1]uh4KZh5hh6]rXhFX4The fitting method can be set using the set command:rYrZ}r[(hX4The fitting method can be set using the set command:hjTubaubcdocutils.nodes literal_block r\)r]}r^(hXset fitting_method = methodhhh"h#h)U literal_blockr_h+}r`(U xml:spaceraUpreserverbh-]h.]h/]h0]h1]uh4K\h5hh6]rchFXset fitting_method = methodrdre}rf(hUhj]ubaubh_)rg}rh(hXlwhere method is one of: ``levenberg_marquardt``, ``mpfit``, ``nelder_mead_simplex``, ``genetic_algorithms``.hhh"h#h)hbh+}ri(h/]h0]h.]h-]h1]uh4K^h5hh6]rj(hFXwhere method is one of: rkrl}rm(hXwhere method is one of: hjgubj4)rn}ro(hX``levenberg_marquardt``h+}rp(h/]h0]h.]h-]h1]uhjgh6]rqhFXlevenberg_marquardtrrrs}rt(hUhjnubah)j<ubhFX, rurv}rw(hX, hjgubj4)rx}ry(hX ``mpfit``h+}rz(h/]h0]h.]h-]h1]uhjgh6]r{hFXmpfitr|r}}r~(hUhjxubah)j<ubhFX, rr}r(hX, hjgubj4)r}r(hX``nelder_mead_simplex``h+}r(h/]h0]h.]h-]h1]uhjgh6]rhFXnelder_mead_simplexrr}r(hUhjubah)j<ubhFX, rr}r(hX, hjgubj4)r}r(hX``genetic_algorithms``h+}r(h/]h0]h.]h-]h1]uhjgh6]rhFXgenetic_algorithmsrr}r(hUhjubah)j<ubhFX.r}r(hX.hjgubeubh_)r}r(hX[All non-linear fitting methods are iterative, and there are three common stopping criteria:rhhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kah5hh6]rhFX[All non-linear fitting methods are iterative, and there are three common stopping criteria:rr}r(hjhjubaubcdocutils.nodes bullet_list r)r}r(hUhhh"h#h)U bullet_listrh+}r(UbulletrX-h-]h.]h/]h0]h1]uh4Kdh5hh6]r(cdocutils.nodes list_item r)r}r(hXIthe number of iterations; it can be specified after the ``fit`` command. hjh"h#h)U list_itemrh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hXHthe number of iterations; it can be specified after the ``fit`` command.hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kdh6]r(hFX8the number of iterations; it can be specified after the rr}r(hX8the number of iterations; it can be specified after the hjubj4)r}r(hX``fit``h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXfitrr}r(hUhjubah)j<ubhFX command.rr}r(hX command.hjubeubaubj)r}r(hXthe number of evaluations of the objective function (WSSR); set using the option :option:`max_wssr_evaluations` (0=unlimited). hjh"h#h)jh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hX~the number of evaluations of the objective function (WSSR); set using the option :option:`max_wssr_evaluations` (0=unlimited).hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kfh6]r(hFXQthe number of evaluations of the objective function (WSSR); set using the option rr}r(hXQthe number of evaluations of the objective function (WSSR); set using the option hjubcsphinx.addnodes pending_xref r)r}r(hX:option:`max_wssr_evaluations`rhjh"h#h)U pending_xrefrh+}r(UreftypeXoptionUrefwarnrU reftargetrXmax_wssr_evaluationsU refdomainXstdrh-]h.]U refexplicith/]h0]h1]UrefdocrhU std:programrNuh4Kfh6]rj4)r}r(hjh+}r(h/]h0]r(UxrefrjX std-optionreh.]h-]h1]uhjh6]rhFXmax_wssr_evaluationsrr}r(hUhjubah)j<ubaubhFX (0=unlimited).rr}r(hX (0=unlimited).hjubeubaubj)r}r(hXOand the processor time, in seconds (:option:`max_fitting_time`, 0=unlimited). hjh"h#h)jh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hXNand the processor time, in seconds (:option:`max_fitting_time`, 0=unlimited).hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kih6]r(hFX$and the processor time, in seconds (rr}r(hX$and the processor time, in seconds (hjubj)r}r(hX:option:`max_fitting_time`rhjh"h#h)jh+}r(UreftypeXoptionjjXmax_fitting_timeU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jhjNuh4Kih6]rj4)r}r(hjh+}r(h/]h0]r(jjX std-optionreh.]h-]h1]uhjh6]rhFXmax_fitting_timerr}r(hUhjubah)j<ubaubhFX, 0=unlimited).rr}r(hX, 0=unlimited).hjubeubaubeubh_)r}r(hX9There are also other criteria, different for each method.rhhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Klh5hh6]rhFX9There are also other criteria, different for each method.rr}r(hjhjubaubh_)r}r(hXOn Unix, fitting can be interrupted by sending the ``INT`` signal to the program. This is usually done by pressing Ctrl-C in the terminal.hhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Knh5hh6]r(hFX3On Unix, fitting can be interrupted by sending the rr }r (hX3On Unix, fitting can be interrupted by sending the hjubj4)r }r (hX``INT``h+}r (h/]h0]h.]h-]h1]uhjh6]rhFXINTrr}r(hUhj ubah)j<ubhFXP signal to the program. This is usually done by pressing Ctrl-C in the terminal.rr}r(hXP signal to the program. This is usually done by pressing Ctrl-C in the terminal.hjubeubh_)r}r(hX^Setting ``set fit_replot = 1`` will plot a model after every iteration, to visualize progress.hhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kqh5hh6]r(hFXSetting rr}r(hXSetting hjubj4)r}r(hX``set fit_replot = 1``h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXset fit_replot = 1r r!}r"(hUhjubah)j<ubhFX@ will plot a model after every iteration, to visualize progress.r#r$}r%(hX@ will plot a model after every iteration, to visualize progress.hjubeubh_)r&}r'(hXo``info fit`` shows measures of goodness-of-fit, including :math:`\chi^2`, reduced :math:`\chi^2` and R-squared:hhh"h#h)hbh+}r((h/]h0]h.]h-]h1]uh4Kth5hh6]r)(j4)r*}r+(hX ``info fit``h+}r,(h/]h0]h.]h-]h1]uhj&h6]r-hFXinfo fitr.r/}r0(hUhj*ubah)j<ubhFX. shows measures of goodness-of-fit, including r1r2}r3(hX. shows measures of goodness-of-fit, including hj&ubh)r4}r5(hUh+}r6(UlatexX\chi^2h-]h.]h/]h0]h1]uhj&h6]h)hubhFX , reduced r7r8}r9(hX , reduced hj&ubh)r:}r;(hUh+}r<(UlatexX\chi^2h-]h.]h/]h0]h1]uhj&h6]h)hubhFX and R-squared:r=r>}r?(hX and R-squared:hj&ubeubh)r@}rA(hUhhh"h#h)hh+}rB(hXHR^2 \equiv 1 - {{\sum_i (y_i - f_i)^2} \over {\sum_i (y_i-\bar{y})^2}} hh-]h.]h/]h0]h1]hhhNuh4Kwh5hh6]ubh_)rC}rD(hXHValues of all parameters are stored before and after fitting (if they change). This enables simple undo/redo functionality. If in the meantime some functions or variables where added or removed, the program can still load the old parameters, but the result can be unexpected. The following history-related commands are provided:rEhhh"h#h)hbh+}rF(h/]h0]h.]h-]h1]uh4Kzh5hh6]rGhFXHValues of all parameters are stored before and after fitting (if they change). This enables simple undo/redo functionality. If in the meantime some functions or variables where added or removed, the program can still load the old parameters, but the result can be unexpected. The following history-related commands are provided:rHrI}rJ(hjEhjCubaubcdocutils.nodes definition_list rK)rL}rM(hUhhh"h#h)Udefinition_listrNh+}rO(h/]h0]h.]h-]h1]uh4Nh5hh6]rP(cdocutils.nodes definition_list_item rQ)rR}rS(hX>fit undo move back to the previous parameters (undo fitting). hjLh"h#h)Udefinition_list_itemrTh+}rU(h/]h0]h.]h-]h1]uh4Kh6]rV(cdocutils.nodes term rW)rX}rY(hXfit undorZhjRh"h#h)Utermr[h+}r\(h/]h0]h.]h-]h1]uh4Kh6]r]hFXfit undor^r_}r`(hjZhjXubaubcdocutils.nodes definition ra)rb}rc(hUh+}rd(h/]h0]h.]h-]h1]uhjRh6]reh_)rf}rg(hX4move back to the previous parameters (undo fitting).rhhjbh"h#h)hbh+}ri(h/]h0]h.]h-]h1]uh4Kh6]rjhFX4move back to the previous parameters (undo fitting).rkrl}rm(hjhhjfubaubah)U definitionrnubeubjQ)ro}rp(hX/fit redo move forward in the parameter history hjLh"h#h)jTh+}rq(h/]h0]h.]h-]h1]uh4Kh5hh6]rr(jW)rs}rt(hXfit redoruhjoh"h#h)j[h+}rv(h/]h0]h.]h-]h1]uh4Kh6]rwhFXfit redorxry}rz(hjuhjsubaubja)r{}r|(hUh+}r}(h/]h0]h.]h-]h1]uhjoh6]r~h_)r}r(hX%move forward in the parameter historyrhj{h"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]rhFX%move forward in the parameter historyrr}r(hjhjubaubah)jnubeubjQ)r}r(hX5info fit_history show number of items in the history hjLh"h#h)jTh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]r(jW)r}r(hXinfo fit_historyrhjh"h#h)j[h+}r(h/]h0]h.]h-]h1]uh4Kh6]rhFXinfo fit_historyrr}r(hjhjubaubja)r}r(hUh+}r(h/]h0]h.]h-]h1]uhjh6]rh_)r}r(hX#show number of items in the historyrhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]rhFX#show number of items in the historyrr}r(hjhjubaubah)jnubeubjQ)r}r(hX?fit history *n* load the *n*-th set of parameters from history hjLh"h#h)jTh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]r(jW)r}r(hXfit history *n*rhjh"h#h)j[h+}r(h/]h0]h.]h-]h1]uh4Kh6]r(hFX fit history rr}r(hX fit history hjubhh)r}r(hX*n*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXnr}r(hUhjubah)hpubeubja)r}r(hUh+}r(h/]h0]h.]h-]h1]uhjh6]rh_)r}r(hX.load the *n*-th set of parameters from historyhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]r(hFX load the rr}r(hX load the hjubhh)r}r(hX*n*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXnr}r(hUhjubah)hpubhFX"-th set of parameters from historyrr}r(hX"-th set of parameters from historyhjubeubah)jnubeubjQ)r}r(hX$fit clear_history clear the history hjLh"h#h)jTh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]r(jW)r}r(hXfit clear_historyrhjh"h#h)j[h+}r(h/]h0]h.]h-]h1]uh4Kh6]rhFXfit clear_historyrr}r(hjhjubaubja)r}r(hUh+}r(h/]h0]h.]h-]h1]uhjh6]rh_)r}r(hXclear the historyrhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]rhFXclear the historyrr}r(hjhjubaubah)jnubeubeubeubh)r}r(hUhh h"h#h)h7h+}r(h/]h0]h.]h-]rUuncertainty-of-parametersrah1]rhauh4Kh5hh6]r(h?)r}r(hXUncertainty of Parametersrhjh"h#h)hCh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]rhFXUncertainty of Parametersrr}r(hjhjubaubh_)r}r(hXFrom the book J. Wolberg, *Data Analysis Using the Method of Least Squares: Extracting the Most Information from Experiments*, Springer, 2006, p.50:rhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]r(hFXFrom the book J. Wolberg, rr}r(hXFrom the book J. Wolberg, hjubhh)r}r(hXc*Data Analysis Using the Method of Least Squares: Extracting the Most Information from Experiments*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXaData Analysis Using the Method of Least Squares: Extracting the Most Information from Experimentsrr}r(hUhjubah)hpubhFX, Springer, 2006, p.50:rr}r(hX, Springer, 2006, p.50:hjubeubh)r}r(hUhjh"h#h)hh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hX(...) we turn to the task of determining the uncertainties associated with the :math:`a_k`'s. The usual measures of uncertainty are standard deviation (i.e., *σ*) or variance (i.e., *σ*:sup:`2`) so we seek an expression that allows us to estimate the :math:`\sigma_{a_k}`'s. It can be shown (...) that the following expression gives us an unbiased estimate of :math:`\sigma_{a_k}`:hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]r(hFXO(...) we turn to the task of determining the uncertainties associated with the rr}r(hXO(...) we turn to the task of determining the uncertainties associated with the hjubh)r }r (hUh+}r (UlatexXa_kh-]h.]h/]h0]h1]uhjh6]h)hubhFXD's. The usual measures of uncertainty are standard deviation (i.e., r r }r(hXD's. The usual measures of uncertainty are standard deviation (i.e., hjubhh)r}r(hX*σ*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXσr}r(hUhjubah)hpubhFX) or variance (i.e., rr}r(hX) or variance (i.e., hjubhh)r}r(hX*σ*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXσr}r(hUhjubah)hpubcdocutils.nodes superscript r)r}r (hX:sup:`2`h+}r!(h/]h0]h.]h-]h1]uhjh6]r"hFX2r#}r$(hUhjubah)U superscriptr%ubhFX:) so we seek an expression that allows us to estimate the r&r'}r((hX:) so we seek an expression that allows us to estimate the hjubh)r)}r*(hUh+}r+(UlatexX \sigma_{a_k}h-]h.]h/]h0]h1]uhjh6]h)hubhFXY's. It can be shown (...) that the following expression gives us an unbiased estimate of r,r-}r.(hXY's. It can be shown (...) that the following expression gives us an unbiased estimate of hjubh)r/}r0(hUh+}r1(UlatexX \sigma_{a_k}h-]h.]h/]h0]h1]uhjh6]h)hubhFX:r2}r3(hX:hjubeubaubh)r4}r5(hUhjh"h#h)hh+}r6(hX+\sigma_{a_k}^{2}=\frac{S}{n-p}C_{kk}^{-1} hh-]h.]h/]h0]h1]hhhNuh4Kh5hh6]ubh_)r7}r8(hX9Note that :math:`\sigma_{a_k}` is a square root of the value above. In this formula *n-p*, the number of (active) data points minus the number of independent parameters, is equal to the number of degrees of freedom. *S* is another symbol for :math:`\chi^2` (the latter symbol is used e.g. in *Numerical Recipes*).hjh"h#h)hbh+}r9(h/]h0]h.]h-]h1]uh4Kh5hh6]r:(hFX Note that r;r<}r=(hX Note that hj7ubh)r>}r?(hUh+}r@(UlatexX \sigma_{a_k}h-]h.]h/]h0]h1]uhj7h6]h)hubhFX6 is a square root of the value above. In this formula rArB}rC(hX6 is a square root of the value above. In this formula hj7ubhh)rD}rE(hX*n-p*h+}rF(h/]h0]h.]h-]h1]uhj7h6]rGhFXn-prHrI}rJ(hUhjDubah)hpubhFX, the number of (active) data points minus the number of independent parameters, is equal to the number of degrees of freedom. rKrL}rM(hX, the number of (active) data points minus the number of independent parameters, is equal to the number of degrees of freedom. hj7ubhh)rN}rO(hX*S*h+}rP(h/]h0]h.]h-]h1]uhj7h6]rQhFXSrR}rS(hUhjNubah)hpubhFX is another symbol for rTrU}rV(hX is another symbol for hj7ubh)rW}rX(hUh+}rY(UlatexX\chi^2h-]h.]h/]h0]h1]uhj7h6]h)hubhFX$ (the latter symbol is used e.g. in rZr[}r\(hX$ (the latter symbol is used e.g. in hj7ubhh)r]}r^(hX*Numerical Recipes*h+}r_(h/]h0]h.]h-]h1]uhj7h6]r`hFXNumerical Recipesrarb}rc(hUhj]ubah)hpubhFX).rdre}rf(hX).hj7ubeubh_)rg}rh(hX>Terms of the *C* matrix are given as (p. 47 in the same book):rihjh"h#h)hbh+}rj(h/]h0]h.]h-]h1]uh4Kh5hh6]rk(hFX Terms of the rlrm}rn(hX Terms of the hjgubhh)ro}rp(hX*C*h+}rq(h/]h0]h.]h-]h1]uhjgh6]rrhFXCrs}rt(hUhjoubah)hpubhFX. matrix are given as (p. 47 in the same book):rurv}rw(hX. matrix are given as (p. 47 in the same book):hjgubeubh)rx}ry(hUhjh"h#h)hh+}rz(hXYC_{jk}=\sum_{i=1}^n w_i \frac{\partial f}{\partial a_j} \frac{\partial f}{\partial a_k} hh-]h.]h/]h0]h1]hhhNuh4Kh5hh6]ubh_)r{}r|(hX:math:`\sigma_{a_k}` above is often called a *standard error*. Having standard errors, it is easy to calculate confidence intervals. Now another book will be cited: H. Motulsky and A. Christopoulos, *Fitting Models to Biological Data Using Linear and Nonlinear Regression: A Practical Guide to Curve Fitting*, Oxford University Press, 2004. This book can be `downloaded for free`__ as a manual to GraphPad Prism 4.hjh"h#h)hbh+}r}(h/]h0]h.]h-]h1]uh4Kh5hh6]r~(h)r}r(hUh+}r(UlatexX \sigma_{a_k}h-]h.]h/]h0]h1]uhj{h6]h)hubhFX above is often called a rr}r(hX above is often called a hj{ubhh)r}r(hX*standard error*h+}r(h/]h0]h.]h-]h1]uhj{h6]rhFXstandard errorrr}r(hUhjubah)hpubhFX. Having standard errors, it is easy to calculate confidence intervals. Now another book will be cited: H. Motulsky and A. Christopoulos, rr}r(hX. Having standard errors, it is easy to calculate confidence intervals. Now another book will be cited: H. Motulsky and A. Christopoulos, hj{ubhh)r}r(hXm*Fitting Models to Biological Data Using Linear and Nonlinear Regression: A Practical Guide to Curve Fitting*h+}r(h/]h0]h.]h-]h1]uhj{h6]rhFXkFitting Models to Biological Data Using Linear and Nonlinear Regression: A Practical Guide to Curve Fittingrr}r(hUhjubah)hpubhFX2, Oxford University Press, 2004. This book can be rr}r(hX2, Oxford University Press, 2004. This book can be hj{ubht)r}r(hX`downloaded for free`__UresolvedrKhj{h)h~h+}r(UnameXdownloaded for freehxX9http://www.graphpad.com/manuals/prism4/RegressionBook.pdfrh-]h.]h/]h0]h1]U anonymousrKuh6]rhFXdownloaded for freerr}r(hUhjubaubhFX! as a manual to GraphPad Prism 4.rr}r(hX! as a manual to GraphPad Prism 4.hj{ubeubh&)r}r(hX<__ http://www.graphpad.com/manuals/prism4/RegressionBook.pdfhKhjh"h#h)h*h+}r(hxjh-]rUid1rah.]h/]h0]h1]jKuh4Kh5hh6]ubh)r}r(hUhjh"h#h)hh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]r(h_)r}r(hXThe standard errors reported by most nonlinear regression programs (...) are "approximate" or "asymptotic". Accordingly, the confidence intervals computed using these errors should also be considered approximate.rhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]rhFXThe standard errors reported by most nonlinear regression programs (...) are "approximate" or "asymptotic". Accordingly, the confidence intervals computed using these errors should also be considered approximate.rr}r(hjhjubaubh_)r}r(hXIt would be a mistake to assume that the "95% confidence intervals" reported by nonlinear regression have exactly a 95% chance of enclosing the true parameter values. The chance that the true value of the parameter is within the reported confidence interval may not be exactly 95%. Even so, the asymptotic confidence intervals will give you a good sense of how precisely you have determined the value of the parameter.rhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]rhFXIt would be a mistake to assume that the "95% confidence intervals" reported by nonlinear regression have exactly a 95% chance of enclosing the true parameter values. The chance that the true value of the parameter is within the reported confidence interval may not be exactly 95%. Even so, the asymptotic confidence intervals will give you a good sense of how precisely you have determined the value of the parameter.rr}r(hjhjubaubh_)r}r(hXThe calculations only work if nonlinear regression has converged on a sensible fit. If the regression converged on a false minimum, then the sum-of-squares as well as the parameter values will be wrong, so the reported standard error and confidence intervals won’t be helpful.rhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]rhFXThe calculations only work if nonlinear regression has converged on a sensible fit. If the regression converged on a false minimum, then the sum-of-squares as well as the parameter values will be wrong, so the reported standard error and confidence intervals won’t be helpful.rr}r(hjhjubaubeubh_)r}r(hX In Fityk:rhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]rhFX In Fityk:rr}r(hjhjubaubj)r}r(hUhjh"h#h)jh+}r(jX*h-]h.]h/]h0]h1]uh4Kh5hh6]r(j)r}r(hX5``info errors`` shows values of :math:`\sigma_{a_k}`.rhjh"h#h)jh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hjhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]r(j4)r}r(hX``info errors``h+}r(h/]h0]h.]h-]h1]uhjh6]rhFX info errorsrr}r(hUhjubah)j<ubhFX shows values of rr}r(hX shows values of hjubh)r}r(hUh+}r(UlatexX \sigma_{a_k}h-]h.]h/]h0]h1]uhjh6]h)hubhFX.r}r(hX.hjubeubaubj)r}r(hXb``info confidence 95`` shows confidence limits for confidence level 95% (any level can be choosen)hjh"h#h)jh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hXb``info confidence 95`` shows confidence limits for confidence level 95% (any level can be choosen)hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]r(j4)r}r(hX``info confidence 95``h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXinfo confidence 95rr}r(hUhjubah)j<ubhFXL shows confidence limits for confidence level 95% (any level can be choosen)rr}r(hXL shows confidence limits for confidence level 95% (any level can be choosen)hjubeubaubj)r}r(hX,``info cov`` shows the matrix *C*:sup:`--1`.rhjh"h#h)jh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hjhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]r(j4)r}r(hX ``info cov``h+}r(h/]h0]h.]h-]h1]uhjh6]r hFXinfo covr r }r (hUhjubah)j<ubhFX shows the matrix r r}r(hX shows the matrix hjubhh)r}r(hX*C*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXCr}r(hUhjubah)hpubj)r}r(hX :sup:`--1`h+}r(h/]h0]h.]h-]h1]uhjh6]rhFX--1rr}r(hUhjubah)j%ubhFX.r}r(hX.hjubeubaubj)r}r (hXwIndividual symmetric errors of simple-variables can be accessed as ``$variable.error`` or e.g. ``%func.height.error``. hjh"h#h)jh+}r!(h/]h0]h.]h-]h1]uh4Nh5hh6]r"h_)r#}r$(hXvIndividual symmetric errors of simple-variables can be accessed as ``$variable.error`` or e.g. ``%func.height.error``.hjh"h#h)hbh+}r%(h/]h0]h.]h-]h1]uh4Kh6]r&(hFXCIndividual symmetric errors of simple-variables can be accessed as r'r(}r)(hXCIndividual symmetric errors of simple-variables can be accessed as hj#ubj4)r*}r+(hX``$variable.error``h+}r,(h/]h0]h.]h-]h1]uhj#h6]r-hFX$variable.errorr.r/}r0(hUhj*ubah)j<ubhFX or e.g. r1r2}r3(hX or e.g. hj#ubj4)r4}r5(hX``%func.height.error``h+}r6(h/]h0]h.]h-]h1]uhj#h6]r7hFX%func.height.errorr8r9}r:(hUhj4ubah)j<ubhFX.r;}r<(hX.hj#ubeubaubeubcdocutils.nodes admonition r=)r>}r?(hX|select :menuselection:`Fit --> Info` from the menu to see uncertainties, confidence intervals and and the covariance matrix.hjh"h#h)U admonitionr@h+}rA(h/]h0]rBUadmonition-in-the-guirCah.]h-]h1]uh4Nh5hh6]rD(h?)rE}rF(hX In the GUIrGhj>h"h#h)hCh+}rH(h/]h0]h.]h-]h1]uh4Kh6]rIhFX In the GUIrJrK}rL(hjGhjEubaubh_)rM}rN(hX|select :menuselection:`Fit --> Info` from the menu to see uncertainties, confidence intervals and and the covariance matrix.hj>h"h#h)hbh+}rO(h/]h0]h.]h-]h1]uh4Kh6]rP(hFXselect rQrR}rS(hXselect hjMubcdocutils.nodes inline rT)rU}rV(hUh+}rW(UrawtextX:menuselection:`Fit --> Info`h-]h.]h/]h0]rXX menuselectionrYah1]uhjMh6]rZhFX Fit ‣ Infor[r\}r](hUhjUubah)Uinliner^ubhFXX from the menu to see uncertainties, confidence intervals and and the covariance matrix.r_r`}ra(hXX from the menu to see uncertainties, confidence intervals and and the covariance matrix.hjMubeubeubcdocutils.nodes note rb)rc}rd(hXIn Fityk 0.9.0 and earlier ``info errors`` reported values of :math:`\sqrt{C_{kk}^{-1}}`, which makes sense if the standard deviations of *y*'s are set accurately. This formula is derived in *Numerical Recipes*.hjh"h#h)Unotereh+}rf(h/]h0]h.]h-]h1]uh4Nh5hh6]rgh_)rh}ri(hXIn Fityk 0.9.0 and earlier ``info errors`` reported values of :math:`\sqrt{C_{kk}^{-1}}`, which makes sense if the standard deviations of *y*'s are set accurately. This formula is derived in *Numerical Recipes*.hjch"h#h)hbh+}rj(h/]h0]h.]h-]h1]uh4Kh6]rk(hFXIn Fityk 0.9.0 and earlier rlrm}rn(hXIn Fityk 0.9.0 and earlier hjhubj4)ro}rp(hX``info errors``h+}rq(h/]h0]h.]h-]h1]uhjhh6]rrhFX info errorsrsrt}ru(hUhjoubah)j<ubhFX reported values of rvrw}rx(hX reported values of hjhubh)ry}rz(hUh+}r{(UlatexX\sqrt{C_{kk}^{-1}}h-]h.]h/]h0]h1]uhjhh6]h)hubhFX2, which makes sense if the standard deviations of r|r}}r~(hX2, which makes sense if the standard deviations of hjhubhh)r}r(hX*y*h+}r(h/]h0]h.]h-]h1]uhjhh6]rhFXyr}r(hUhjubah)hpubhFX2's are set accurately. This formula is derived in rr}r(hX2's are set accurately. This formula is derived in hjhubhh)r}r(hX*Numerical Recipes*h+}r(h/]h0]h.]h-]h1]uhjhh6]rhFXNumerical Recipesrr}r(hUhjubah)hpubhFX.r}r(hX.hjhubeubaubh&)r}r(hX .. _levmar:hjh"h#h)h*h+}r(h-]h.]h/]h0]h1]h2Ulevmarruh4Kh5hh6]ubeubhh)r}r(hUhh h"h#h$}rh h&)r}r(hX .. _nelder:hhh"h#h)h*h+}r(h-]h.]h/]h0]h1]h2Unelderruh4Mh5hh6]ubsh)h7h+}r(h/]h0]h.]h-]r(Unelder-mead-downhill-simplexrjeh1]r(hh euh4Mh5hh<}rjjsh6]r(h?)r}r(hXNelder-Mead Downhill Simplexrhjh"h#h)hCh+}r(h/]h0]h.]h-]h1]uh4Mh5hh6]rhFXNelder-Mead Downhill Simplexrr}r(hjhjubaubh_)r}r(hXtTo quote chapter 4.8.3, p. 86 of Peter Gans, *Data Fitting in the Chemical Sciences by the Method of Least Squares*:hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4M h5hh6]r(hFX-To quote chapter 4.8.3, p. 86 of Peter Gans, rr}r(hX-To quote chapter 4.8.3, p. 86 of Peter Gans, hjubhh)r}r(hXF*Data Fitting in the Chemical Sciences by the Method of Least Squares*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXDData Fitting in the Chemical Sciences by the Method of Least Squaresrr}r(hUhjubah)hpubhFX:r}r(hX:hjubeubh)r}r(hUhjh"h#h)hh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hXA simplex is a geometrical entity that has n+1 vertices corresponding to variations in n parameters. For two parameters the simplex is a triangle, for three parameters the simplex is a tetrahedron and so forth. The value of the objective function is calculated at each of the vertices. An iteration consists of the following process. Locate the vertex with the highest value of the objective function and replace this vertex by one lying on the line between it and the centroid of the other vertices. Four possible replacements can be considered, which I call contraction, short reflection, reflection and expansion.[...] It starts with an arbitrary simplex. Neither the shape nor position of this are critically important, except insofar as it may determine which one of a set of multiple minima will be reached. The simplex than expands and contracts as required in order to locate a valley if one exists. Then the size and shape of the simplex is adjusted so that progress may be made towards the minimum. Note particularly that if a pair of parameters are highly correlated, *both* will be simultaneously adjusted in about the correct proportion, as the shape of the simplex is adapted to the local contours.[...] Unfortunately it does not provide estimates of the parameter errors, etc. It is therefore to be recommended as a method for obtaining initial parameter estimates that can be used in the standard least squares method.hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4M h6]r(hFX8A simplex is a geometrical entity that has n+1 vertices corresponding to variations in n parameters. For two parameters the simplex is a triangle, for three parameters the simplex is a tetrahedron and so forth. The value of the objective function is calculated at each of the vertices. An iteration consists of the following process. Locate the vertex with the highest value of the objective function and replace this vertex by one lying on the line between it and the centroid of the other vertices. Four possible replacements can be considered, which I call contraction, short reflection, reflection and expansion.[...] It starts with an arbitrary simplex. Neither the shape nor position of this are critically important, except insofar as it may determine which one of a set of multiple minima will be reached. The simplex than expands and contracts as required in order to locate a valley if one exists. Then the size and shape of the simplex is adjusted so that progress may be made towards the minimum. Note particularly that if a pair of parameters are highly correlated, rr}r(hX8A simplex is a geometrical entity that has n+1 vertices corresponding to variations in n parameters. For two parameters the simplex is a triangle, for three parameters the simplex is a tetrahedron and so forth. The value of the objective function is calculated at each of the vertices. An iteration consists of the following process. Locate the vertex with the highest value of the objective function and replace this vertex by one lying on the line between it and the centroid of the other vertices. Four possible replacements can be considered, which I call contraction, short reflection, reflection and expansion.[...] It starts with an arbitrary simplex. Neither the shape nor position of this are critically important, except insofar as it may determine which one of a set of multiple minima will be reached. The simplex than expands and contracts as required in order to locate a valley if one exists. Then the size and shape of the simplex is adjusted so that progress may be made towards the minimum. Note particularly that if a pair of parameters are highly correlated, hjubhh)r}r(hX*both*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXbothrr}r(hUhjubah)hpubhFX] will be simultaneously adjusted in about the correct proportion, as the shape of the simplex is adapted to the local contours.[...] Unfortunately it does not provide estimates of the parameter errors, etc. It is therefore to be recommended as a method for obtaining initial parameter estimates that can be used in the standard least squares method.rr}r(hX] will be simultaneously adjusted in about the correct proportion, as the shape of the simplex is adapted to the local contours.[...] Unfortunately it does not provide estimates of the parameter errors, etc. It is therefore to be recommended as a method for obtaining initial parameter estimates that can be used in the standard least squares method.hjubeubaubh_)r}r(hX|This method is also described in previously mentioned *Numerical Recipes* (chapter 10.4) and *Data Analysis* (chapter 10.8).hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4M$h5hh6]r(hFX6This method is also described in previously mentioned rr}r(hX6This method is also described in previously mentioned hjubhh)r}r(hX*Numerical Recipes*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXNumerical Recipesrr}r(hUhjubah)hpubhFX (chapter 10.4) and rr}r(hX (chapter 10.4) and hjubhh)r}r(hX*Data Analysis*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFX Data Analysisrr}r(hUhjubah)hpubhFX (chapter 10.8).rr}r(hX (chapter 10.8).hjubeubh_)r}r(hXThere are a few options for tuning this method. One of these is a stopping criterium :option:`nm_convergence`. If the value of the expression 2(*M*\ −\ *m*)/(*M*\ +\ *m*), where *M* and *m* are the values of the worst and best vertices respectively (values of objective functions of vertices, to be precise!), is smaller then the value of :option:`nm_convergence` option, fitting is stopped. In other words, fitting is stopped if all vertices are almost at the same level.hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4M'h5hh6]r(hFXUThere are a few options for tuning this method. One of these is a stopping criterium rr}r(hXUThere are a few options for tuning this method. One of these is a stopping criterium hjubj)r}r(hX:option:`nm_convergence`rhjh"h#h)jh+}r(UreftypeXoptionjjXnm_convergenceU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jhjNuh4M'h6]rj4)r}r(hjh+}r(h/]h0]r(jjX std-optionreh.]h-]h1]uhjh6]rhFXnm_convergencerr}r(hUhjubah)j<ubaubhFX#. If the value of the expression 2(rr}r(hX#. If the value of the expression 2(hjubhh)r}r(hX*M*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXMr}r(hUhjubah)hpubhFX−r }r (hX\ −\ hjubhh)r }r (hX*m*h+}r (h/]h0]h.]h-]h1]uhjh6]rhFXmr}r(hUhj ubah)hpubhFX)/(rr}r(hX)/(hjubhh)r}r(hX*M*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXMr}r(hUhjubah)hpubhFX+r}r(hX\ +\ hjubhh)r}r(hX*m*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXmr }r!(hUhjubah)hpubhFX ), where r"r#}r$(hX ), where hjubhh)r%}r&(hX*M*h+}r'(h/]h0]h.]h-]h1]uhjh6]r(hFXMr)}r*(hUhj%ubah)hpubhFX and r+r,}r-(hX and hjubhh)r.}r/(hX*m*h+}r0(h/]h0]h.]h-]h1]uhjh6]r1hFXmr2}r3(hUhj.ubah)hpubhFX are the values of the worst and best vertices respectively (values of objective functions of vertices, to be precise!), is smaller then the value of r4r5}r6(hX are the values of the worst and best vertices respectively (values of objective functions of vertices, to be precise!), is smaller then the value of hjubj)r7}r8(hX:option:`nm_convergence`r9hjh"h#h)jh+}r:(UreftypeXoptionjjXnm_convergenceU refdomainXstdr;h-]h.]U refexplicith/]h0]h1]jhjNuh4M'h6]r<j4)r=}r>(hj9h+}r?(h/]h0]r@(jj;X std-optionrAeh.]h-]h1]uhj7h6]rBhFXnm_convergencerCrD}rE(hUhj=ubah)j<ubaubhFXm option, fitting is stopped. In other words, fitting is stopped if all vertices are almost at the same level.rFrG}rH(hXm option, fitting is stopped. In other words, fitting is stopped if all vertices are almost at the same level.hjubeubh_)rI}rJ(hXThe remaining options are related to initialization of the simplex. Before starting iterations, we have to choose a set of points in space of the parameters, called vertices. Unless the option :option:`nm_move_all` is set, one of these points will be the current point -- values that parameters have at this moment. All but this one are drawn as follows: each parameter of each vertex is drawn separately. It is drawn from a distribution that has its center in the center of the :ref:`domain ` of the parameter, and a width proportional to both width of the domain and value of the :option:`nm_move_factor` parameter. Distribution shape can be set using the option :option:`nm_distribution` as one of: ``uniform``, ``gaussian``, ``lorentzian`` and ``bound``. The last one causes the value of the parameter to be either the greatest or smallest value in the domain of the parameter -- one of the two bounds of the domain (assuming that :option:`nm_move_factor` is equal 1).hjh"h#h)hbh+}rK(h/]h0]h.]h-]h1]uh4M/h5hh6]rL(hFXThe remaining options are related to initialization of the simplex. Before starting iterations, we have to choose a set of points in space of the parameters, called vertices. Unless the option rMrN}rO(hXThe remaining options are related to initialization of the simplex. Before starting iterations, we have to choose a set of points in space of the parameters, called vertices. Unless the option hjIubj)rP}rQ(hX:option:`nm_move_all`rRhjIh"h#h)jh+}rS(UreftypeXoptionjjX nm_move_allU refdomainXstdrTh-]h.]U refexplicith/]h0]h1]jhjNuh4M/h6]rUj4)rV}rW(hjRh+}rX(h/]h0]rY(jjTX std-optionrZeh.]h-]h1]uhjPh6]r[hFX nm_move_allr\r]}r^(hUhjVubah)j<ubaubhFX  is set, one of these points will be the current point -- values that parameters have at this moment. All but this one are drawn as follows: each parameter of each vertex is drawn separately. It is drawn from a distribution that has its center in the center of the r_r`}ra(hX  is set, one of these points will be the current point -- values that parameters have at this moment. All but this one are drawn as follows: each parameter of each vertex is drawn separately. It is drawn from a distribution that has its center in the center of the hjIubj)rb}rc(hX:ref:`domain `rdhjIh"h#h)jh+}re(UreftypeXrefjjXdomainU refdomainXstdrfh-]h.]U refexplicith/]h0]h1]jhuh4M/h6]rgjT)rh}ri(hjdh+}rj(h/]h0]rk(jjfXstd-refrleh.]h-]h1]uhjbh6]rmhFXdomainrnro}rp(hUhjhubah)j^ubaubhFXY of the parameter, and a width proportional to both width of the domain and value of the rqrr}rs(hXY of the parameter, and a width proportional to both width of the domain and value of the hjIubj)rt}ru(hX:option:`nm_move_factor`rvhjIh"h#h)jh+}rw(UreftypeXoptionjjXnm_move_factorU refdomainXstdrxh-]h.]U refexplicith/]h0]h1]jhjNuh4M/h6]ryj4)rz}r{(hjvh+}r|(h/]h0]r}(jjxX std-optionr~eh.]h-]h1]uhjth6]rhFXnm_move_factorrr}r(hUhjzubah)j<ubaubhFX< parameter. Distribution shape can be set using the option rr}r(hX< parameter. Distribution shape can be set using the option hjIubj)r}r(hX:option:`nm_distribution`rhjIh"h#h)jh+}r(UreftypeXoptionjjXnm_distributionU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jhjNuh4M/h6]rj4)r}r(hjh+}r(h/]h0]r(jjX std-optionreh.]h-]h1]uhjh6]rhFXnm_distributionrr}r(hUhjubah)j<ubaubhFX as one of: rr}r(hX as one of: hjIubj4)r}r(hX ``uniform``h+}r(h/]h0]h.]h-]h1]uhjIh6]rhFXuniformrr}r(hUhjubah)j<ubhFX, rr}r(hX, hjIubj4)r}r(hX ``gaussian``h+}r(h/]h0]h.]h-]h1]uhjIh6]rhFXgaussianrr}r(hUhjubah)j<ubhFX, rr}r(hX, hjIubj4)r}r(hX``lorentzian``h+}r(h/]h0]h.]h-]h1]uhjIh6]rhFX lorentzianrr}r(hUhjubah)j<ubhFX and rr}r(hX and hjIubj4)r}r(hX ``bound``h+}r(h/]h0]h.]h-]h1]uhjIh6]rhFXboundrr}r(hUhjubah)j<ubhFX. The last one causes the value of the parameter to be either the greatest or smallest value in the domain of the parameter -- one of the two bounds of the domain (assuming that rr}r(hX. The last one causes the value of the parameter to be either the greatest or smallest value in the domain of the parameter -- one of the two bounds of the domain (assuming that hjIubj)r}r(hX:option:`nm_move_factor`rhjIh"h#h)jh+}r(UreftypeXoptionjjXnm_move_factorU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jhjNuh4M/h6]rj4)r}r(hjh+}r(h/]h0]r(jjX std-optionreh.]h-]h1]uhjh6]rhFXnm_move_factorrr}r(hUhjubah)j<ubaubhFX is equal 1).rr}r(hX is equal 1).hjIubeubeubh)r}r(hUhh h"h#h)h7h+}r(h/]h0]h.]h-]rUgenetic-algorithmsrah1]rhauh4M@h5hh6]r(h?)r}r(hXGenetic Algorithmsrhjh"h#h)hCh+}r(h/]h0]h.]h-]h1]uh4M@h5hh6]rhFXGenetic Algorithmsrr}r(hjhjubaubh_)r}r(hX\[TODO]rhjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4MBh5hh6]rhFX[TODO]rr}r(hX\[TODO]hjubaubeubeubh"h#h$}rhjsh)h7h+}r(h/]h0]h.]h-]r(Ulevenberg-marquardtrjeh1]r(hheuh4Kh5hh<}rjjsh6]r(h?)r}r(hXLevenberg-Marquardtrhhh"h#h)hCh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]rhFXLevenberg-Marquardtrr}r(hjhjubaubh_)r}r(hXThis is a standard nonlinear least-squares routine, and involves computing the first derivatives of functions. For a description of the algorithm see *Numerical Recipes*, chapter 15.5 or Siegmund Brandt, *Data Analysis*, chapter 10.15. Essentially, it combines an inverse-Hessian method with a steepest descent method by introducing a |lambda| factor. When |lambda| is equal to 0, the method is equivalent to the inverse-Hessian method. When |lambda| increases, the shift vector is rotated toward the direction of steepest descent and the length of the shift vector decreases. (The shift vector is a vector that is added to the parameter vector.) If a better fit is found on iteration, |lambda| is decreased -- it is divided by the value of :option:`lm_lambda_down_factor` option (default: 10). Otherwise, |lambda| is multiplied by the value of :option:`lm_lambda_up_factor` (default: 10). The initial |lambda| value is equal to :option:`lm_lambda_start` (default: 0.0001).hhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]r(hFXThis is a standard nonlinear least-squares routine, and involves computing the first derivatives of functions. For a description of the algorithm see rr}r(hXThis is a standard nonlinear least-squares routine, and involves computing the first derivatives of functions. For a description of the algorithm see hjubhh)r}r(hX*Numerical Recipes*h+}r(h/]h0]h.]h-]h1]uhjh6]rhFXNumerical Recipesrr}r(hUhjubah)hpubhFX#, chapter 15.5 or Siegmund Brandt, rr}r(hX#, chapter 15.5 or Siegmund Brandt, hjubhh)r }r (hX*Data Analysis*h+}r (h/]h0]h.]h-]h1]uhjh6]r hFX Data Analysisr r}r(hUhj ubah)hpubhFXt, chapter 10.15. Essentially, it combines an inverse-Hessian method with a steepest descent method by introducing a rr}r(hXt, chapter 10.15. Essentially, it combines an inverse-Hessian method with a steepest descent method by introducing a hjubhh)r}r(hX*λ*rhjh"Nh)hph+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rhFXλr}r(hUhjubaubhFX factor. When rr}r(hX factor. When hjubhh)r}r(hjhjh"Nh)hph+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]r hFXλr!}r"(hUhjubaubhFXM is equal to 0, the method is equivalent to the inverse-Hessian method. When r#r$}r%(hXM is equal to 0, the method is equivalent to the inverse-Hessian method. When hjubhh)r&}r'(hjhjh"Nh)hph+}r((h/]h0]h.]h-]h1]uh4Nh5hh6]r)hFXλr*}r+(hUhj&ubaubhFX increases, the shift vector is rotated toward the direction of steepest descent and the length of the shift vector decreases. (The shift vector is a vector that is added to the parameter vector.) If a better fit is found on iteration, r,r-}r.(hX increases, the shift vector is rotated toward the direction of steepest descent and the length of the shift vector decreases. (The shift vector is a vector that is added to the parameter vector.) If a better fit is found on iteration, hjubhh)r/}r0(hjhjh"Nh)hph+}r1(h/]h0]h.]h-]h1]uh4Nh5hh6]r2hFXλr3}r4(hUhj/ubaubhFX/ is decreased -- it is divided by the value of r5r6}r7(hX/ is decreased -- it is divided by the value of hjubj)r8}r9(hX:option:`lm_lambda_down_factor`r:hjh"h#h)jh+}r;(UreftypeXoptionjjXlm_lambda_down_factorU refdomainXstdr<h-]h.]U refexplicith/]h0]h1]jhjNuh4Kh6]r=j4)r>}r?(hj:h+}r@(h/]h0]rA(jj<X std-optionrBeh.]h-]h1]uhj8h6]rChFXlm_lambda_down_factorrDrE}rF(hUhj>ubah)j<ubaubhFX" option (default: 10). Otherwise, rGrH}rI(hX" option (default: 10). Otherwise, hjubhh)rJ}rK(hjhjh"Nh)hph+}rL(h/]h0]h.]h-]h1]uh4Nh5hh6]rMhFXλrN}rO(hUhjJubaubhFX is multiplied by the value of rPrQ}rR(hX is multiplied by the value of hjubj)rS}rT(hX:option:`lm_lambda_up_factor`rUhjh"h#h)jh+}rV(UreftypeXoptionjjXlm_lambda_up_factorU refdomainXstdrWh-]h.]U refexplicith/]h0]h1]jhjNuh4Kh6]rXj4)rY}rZ(hjUh+}r[(h/]h0]r\(jjWX std-optionr]eh.]h-]h1]uhjSh6]r^hFXlm_lambda_up_factorr_r`}ra(hUhjYubah)j<ubaubhFX (default: 10). The initial rbrc}rd(hX (default: 10). The initial hjubhh)re}rf(hjhjh"Nh)hph+}rg(h/]h0]h.]h-]h1]uh4Nh5hh6]rhhFXλri}rj(hUhjeubaubhFX value is equal to rkrl}rm(hX value is equal to hjubj)rn}ro(hX:option:`lm_lambda_start`rphjh"h#h)jh+}rq(UreftypeXoptionjjXlm_lambda_startU refdomainXstdrrh-]h.]U refexplicith/]h0]h1]jhjNuh4Kh6]rsj4)rt}ru(hjph+}rv(h/]h0]rw(jjrX std-optionrxeh.]h-]h1]uhjnh6]ryhFXlm_lambda_startrzr{}r|(hUhjtubah)j<ubaubhFX (default: 0.0001).r}r~}r(hX (default: 0.0001).hjubeubh_)r}r(hXNThe Marquardt method has two stopping criteria other than the common criteria.rhhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]rhFXNThe Marquardt method has two stopping criteria other than the common criteria.rr}r(hjhjubaubj)r}r(hUhhh"h#h)jh+}r(jX-h-]h.]h/]h0]h1]uh4Kh5hh6]r(j)r}r(hXIf it happens twice in sequence, that the relative change of the value of the objective function (WSSR) is smaller than the value of the :option:`lm_stop_rel_change` option, the fit is considered to have converged and is stopped. hjh"h#h)jh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hXIf it happens twice in sequence, that the relative change of the value of the objective function (WSSR) is smaller than the value of the :option:`lm_stop_rel_change` option, the fit is considered to have converged and is stopped.hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]r(hFXIf it happens twice in sequence, that the relative change of the value of the objective function (WSSR) is smaller than the value of the rr}r(hXIf it happens twice in sequence, that the relative change of the value of the objective function (WSSR) is smaller than the value of the hjubj)r}r(hX:option:`lm_stop_rel_change`rhjh"h#h)jh+}r(UreftypeXoptionjjXlm_stop_rel_changeU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jhjNuh4Kh6]rj4)r}r(hjh+}r(h/]h0]r(jjX std-optionreh.]h-]h1]uhjh6]rhFXlm_stop_rel_changerr}r(hUhjubah)j<ubaubhFX@ option, the fit is considered to have converged and is stopped.rr}r(hX@ option, the fit is considered to have converged and is stopped.hjubeubaubj)r}r(hXIf |lambda| is greater than the value of the :option:`lm_max_lambda` option (default: 10^15), usually when due to limited numerical precision WSSR is no longer changing, the fitting is also stopped. hjh"h#h)jh+}r(h/]h0]h.]h-]h1]uh4Nh5hh6]rh_)r}r(hXIf |lambda| is greater than the value of the :option:`lm_max_lambda` option (default: 10^15), usually when due to limited numerical precision WSSR is no longer changing, the fitting is also stopped.hjh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh6]r(hFXIf rr}r(hXIf hjubhh)r}r(hjh+}r(h/]h0]h.]h-]h1]uhjh6]rhFXλr}r(hUhjubah)hpubhFX" is greater than the value of the rr}r(hX" is greater than the value of the hjubj)r}r(hX:option:`lm_max_lambda`rhjh"h#h)jh+}r(UreftypeXoptionjjX lm_max_lambdaU refdomainXstdrh-]h.]U refexplicith/]h0]h1]jhjNuh4Kh6]rj4)r}r(hjh+}r(h/]h0]r(jjX std-optionreh.]h-]h1]uhjh6]rhFX lm_max_lambdarr}r(hUhjubah)j<ubaubhFX option (default: 10^15), usually when due to limited numerical precision WSSR is no longer changing, the fitting is also stopped.rr}r(hX option (default: 10^15), usually when due to limited numerical precision WSSR is no longer changing, the fitting is also stopped.hjubeubaubeubhh_)r}r(hXSince version 1.1.2 it is possible to use another implementations of the Levenberg-Marquardt method, from MPFIT_ library. To switch between the two implementation use command::hhh"h#h)hbh+}r(h/]h0]h.]h-]h1]uh4Kh5hh6]r(hFXjSince version 1.1.2 it is possible to use another implementations of the Levenberg-Marquardt method, from rr}r(hXjSince version 1.1.2 it is possible to use another implementations of the Levenberg-Marquardt method, from hjubht)r}r(hXMPFIT_jKhjh)h~h+}r(UnameXMPFIThxX3http://www.physics.wisc.edu/~craigm/idl/cmpfit.htmlrh-]h.]h/]h0]h1]uh6]rhFXMPFITrr}r(hUhjubaubhFX? library. To switch between the two implementation use command:rr}r(hX? library. To switch between the two implementation use command:hjubeubj\)r}r(hXset fitting_method = mpfit # switch to MPFIT set fitting_method = levenberg_marquardt # switch back to default onehhh"h#h)j_h+}r(jajbh-]h.]h/]h0]h1]uh4Mh5hh6]rhFXset fitting_method = mpfit # switch to MPFIT set fitting_method = levenberg_marquardt # switch back to default onerr}r(hUhjubaubh&)r}r(hX>.. _MPFIT: http://www.physics.wisc.edu/~craigm/idl/cmpfit.htmlhKhhh"h#h)h*h+}r(hxjh-]rUmpfitrah.]h/]h0]h1]rh auh4Mh5hh6]ubjeubh"h#h)Usubstitution_definitionrh+}r(h/]h0]h.]h-]h1]rhauh4Kh5hh6]rhh)r}r(hjh+}r(h/]h0]h.]h-]h1]uhhh6]rhFXλr}r(hUhjubah)hpubaubsUparse_messagesr]rUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r(hjhhhhMh jh h3h jh h:h hhhShjhjhhhhhjhjuh6]r(h'h ehUU transformerrNU footnote_refsr}rUrefnamesr}rXmpfit]rjasUsymbol_footnotesr]rUautofootnote_refsr]r Usymbol_footnote_refsr ]r U citationsr ]r h5hU current_linerNUtransform_messagesr]r(cdocutils.nodes system_message r)r}r(hUh+}r(h/]UlevelKh-]h.]Usourceh#h0]h1]UlineKUtypeUINFOruh6]rh_)r}r(hUh+}r(h/]h0]h.]h-]h1]uhjh6]rhFX)Hyperlink target "fit" is not referenced.rr}r(hUhjubah)hbubah)Usystem_messagerubj)r}r (hUh+}r!(h/]UlevelKh-]h.]Usourceh#h0]h1]UlineKUtypejuh6]r"h_)r#}r$(hUh+}r%(h/]h0]h.]h-]h1]uhjh6]r&hFX/Hyperlink target "nonlinear" is not referenced.r'r(}r)(hUhj#ubah)hbubah)jubj)r*}r+(hUh+}r,(h/]UlevelKh-]h.]Usourceh#h0]h1]UlineKBUtypejuh6]r-h_)r.}r/(hUh+}r0(h/]h0]h.]h-]h1]uhj*h6]r1hFX1Hyperlink target "fitting-cmd" is not referenced.r2r3}r4(hUhj.ubah)hbubah)jubj)r5}r6(hUh+}r7(h/]UlevelKh-]h.]Usourceh#h0]h1]UlineKUtypejuh6]r8h_)r9}r:(hUh+}r;(h/]h0]h.]h-]h1]uhj5h6]r<hFX,Hyperlink target "levmar" is not referenced.r=r>}r?(hUhj9ubah)hbubah)jubj)r@}rA(hUh+}rB(h/]UlevelKh-]h.]Usourceh#h0]h1]UlineMUtypejuh6]rCh_)rD}rE(hUh+}rF(h/]h0]h.]h-]h1]uhj@h6]rGhFX,Hyperlink target "nelder" is not referenced.rHrI}rJ(hUhjDubah)hbubah)jubeUreporterrKNUid_startrLKU autofootnotesrM]rNU citation_refsrO}rPUindirect_targetsrQ]rRUsettingsrS(cdocutils.frontend Values rTorU}rV(Ufootnote_backlinksrWKUrecord_dependenciesrXNU rfc_base_urlrYUhttps://tools.ietf.org/html/rZU tracebackr[Upep_referencesr\NUstrip_commentsr]NU toc_backlinksr^Uentryr_U language_coder`UenraU datestamprbNU report_levelrcKU _destinationrdNU halt_levelreKU strip_classesrfNhCNUerror_encoding_error_handlerrgUbackslashreplacerhUdebugriNUembed_stylesheetrjUoutput_encoding_error_handlerrkUstrictrlU sectnum_xformrmKUdump_transformsrnNU docinfo_xformroKUwarning_streamrpNUpep_file_url_templaterqUpep-%04drrUexit_status_levelrsKUconfigrtNUstrict_visitorruNUcloak_email_addressesrvUtrim_footnote_reference_spacerwUenvrxNUdump_pseudo_xmlryNUexpose_internalsrzNUsectsubtitle_xformr{U source_linkr|NUrfc_referencesr}NUoutput_encodingr~Uutf-8rU source_urlrNUinput_encodingrUutf-8rU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUasciirU_sourcerh#Ugettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrU https://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjlUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hMhNjjjjh3h jjhhhhhShNjjjhjjhhjhhhjjh:h uUsubstitution_namesr}rhhsh)h5h+}r(h/]h-]h.]Usourceh#h0]h1]uU footnotesr]rUrefidsr}r(h]rhahM]rhJaj]rjah3]rh'aj]rjauub.PKFI(M +fityk-v1.2.1/.doctrees/fityk-manual.doctreecdocutils.nodes document q)q}q(U nametypesq}qXfityk version - user's manualqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhUfityk-version-user-s-manualqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqXB/var/build/user_builds/fityk/checkouts/v1.2.1/doc/fityk-manual.rstqUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq ]Uidsq!]q"haUnamesq#]q$hauUlineq%KUdocumentq&hh]q'(cdocutils.nodes title q()q)}q*(hXFityk |version| - User's Manualq+hhhhhUtitleq,h}q-(h]h]h ]h!]h#]uh%Kh&hh]q.(cdocutils.nodes Text q/XFityk q0q1}q2(hXFityk q3hh)ubh/X1.2.1q4q5}q6(hU1.2.1q7hNh%Nh&hhh)ubh/X - User's Manualq8q9}q:(hX - User's Manualq;hh)ubeubcdocutils.nodes compound q<)q=}q>(hUhhhhhUcompoundq?h}q@(h]h]qAUtoctree-wrapperqBah ]h!]h#]uh%Nh&hh]qCcsphinx.addnodes toctree qD)qE}qF(hUhh=hhhUtoctreeqGh}qH(UnumberedqIKU includehiddenqJhX fityk-manualqKUcaptionqLNUglobqMh!]h ]U titlesonlyqNh]h]h#]UentriesqO]qP(NXintroqQqRNX getstartedqSqTNXlangqUqVNXdataqWqXNXmodelqYqZNXfitq[q\NXrefq]q^eUhiddenq_U includefilesq`]qa(hQhShUhWhYh[h]eUmaxdepthqbKuh%Kh]ubaubeubahUU transformerqcNU footnote_refsqd}qeUrefnamesqf}qgUsymbol_footnotesqh]qiUautofootnote_refsqj]qkUsymbol_footnote_refsql]qmU citationsqn]qoh&hU current_lineqpNUtransform_messagesqq]qrUreporterqsNUid_startqtKU autofootnotesqu]qvU citation_refsqw}qxUindirect_targetsqy]qzUsettingsq{(cdocutils.frontend Values q|oq}}q~(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttps://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh,NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqUutf-8qU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUasciiqU_sourceqhUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqU https://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qhhsUsubstitution_namesq}qhh&h}q(h]h,XContentsh!]h ]Usourcehh]h#]uU footnotesq]qUrefidsq}qub.PKFjü44#fityk-v1.2.1/.doctrees/lang.doctreecdocutils.nodes document q)q}q(U nametypesq}q(XlangqX mini-languageqNXgrammarqNuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceq NU decorationqNUautofootnote_startqKUnameidsq}q(hUlangqhU mini-languageqhUgrammarquUchildrenq]q(cdocutils.nodes target q)q}q(U rawsourceqX .. _lang:UparentqhUsourceqX:/var/build/user_builds/fityk/checkouts/v1.2.1/doc/lang.rstqUtagnameqUtargetqU attributesq }q!(Uidsq"]Ubackrefsq#]Udupnamesq$]Uclassesq%]Unamesq&]Urefidq'huUlineq(KUdocumentq)hh]ubcdocutils.nodes section q*)q+}q,(hUhhhhUexpect_referenced_by_nameq-}q.hhshUsectionq/h }q0(h$]h%]h#]h"]q1(hheh&]q2(hheuh(Kh)hUexpect_referenced_by_idq3}q4hhsh]q5(cdocutils.nodes title q6)q7}q8(hX Mini-Languageq9hh+hhhUtitleq:h }q;(h$]h%]h#]h"]h&]uh(Kh)hh]qq?}q@(hh9hh7ubaubcdocutils.nodes paragraph qA)qB}qC(hXFityk comes with own domain-specific language (DSL), which is humbly called mini-language. All operations are driven by commands of the mini-language.qDhh+hhhU paragraphqEh }qF(h$]h%]h#]h"]h&]uh(Kh)hh]qGh=XFityk comes with own domain-specific language (DSL), which is humbly called mini-language. All operations are driven by commands of the mini-language.qHqI}qJ(hhDhhBubaubcdocutils.nodes admonition qK)qL}qM(hXyou do not need to learn the syntax of the mini-language. It is possible to use menus and dialogs in the GUI and avoid typing commands.hh+hhhU admonitionqNh }qO(h$]h%]qPUadmonition-do-not-worryqQah#]h"]h&]uh(Nh)hh]qR(h6)qS}qT(hX Do not worryqUhhLhhhh:h }qV(h$]h%]h#]h"]h&]uh(K h]qWh=X Do not worryqXqY}qZ(hhUhhSubaubhA)q[}q\(hXyou do not need to learn the syntax of the mini-language. It is possible to use menus and dialogs in the GUI and avoid typing commands.q]hhLhhhhEh }q^(h$]h%]h#]h"]h&]uh(K h]q_h=Xyou do not need to learn the syntax of the mini-language. It is possible to use menus and dialogs in the GUI and avoid typing commands.q`qa}qb(hh]hh[ubaubeubhA)qc}qd(hXWWhen you use the GUI and perform an action using the menu, you can see the corresponding command in the output window. It is one of less than 30 fityk commands. The commands have relatively simple syntax and perform single actions, such as loading data from file, adding function, assigning variable, fitting, or writing some values to a file.qehh+hhhhEh }qf(h$]h%]h#]h"]h&]uh(Kh)hh]qgh=XWWhen you use the GUI and perform an action using the menu, you can see the corresponding command in the output window. It is one of less than 30 fityk commands. The commands have relatively simple syntax and perform single actions, such as loading data from file, adding function, assigning variable, fitting, or writing some values to a file.qhqi}qj(hhehhcubaubhA)qk}ql(hXJIt is possible to write a script (macro) as a sequence of such commands. This can automate common tasks, although some complex tasks still need to be programmed in a general-purpose language. That is why Fityk comes with embedded Lua (lightweight programming language) and also with bindings to Python and several other languages.qmhh+hhhhEh }qn(h$]h%]h#]h"]h&]uh(Kh)hh]qoh=XJIt is possible to write a script (macro) as a sequence of such commands. This can automate common tasks, although some complex tasks still need to be programmed in a general-purpose language. That is why Fityk comes with embedded Lua (lightweight programming language) and also with bindings to Python and several other languages.qpqq}qr(hhmhhkubaubhA)qs}qt(hXLNow a quick glimpse at the syntax. Here, the ``=->`` prompt marks an input::quhh+hhhhEh }qv(h$]h%]h#]h"]h&]uh(Kh)hh]qw(h=X-Now a quick glimpse at the syntax. Here, the qxqy}qz(hX-Now a quick glimpse at the syntax. Here, the hhsubcdocutils.nodes literal q{)q|}q}(hX``=->``h }q~(h$]h%]h#]h"]h&]uhhsh]qh=X=->qq}q(hUhh|ubahUliteralqubh=X prompt marks an input:qq}q(hX prompt marks an input:hhsubeubcdocutils.nodes literal_block q)q}q(hX=-> print pi 3.14159 =-> # this is a comment -- from `#' to the end of line =-> p '2+3=', 2+3 # p stands for print 2+3 = 5 =-> set numeric_format='%.9f' # show 9 digits after dot =-> pr pi, pi^2, pi^3 # pr, pri and prin also stand for print 3.141592654 9.869604401 31.006276680hh+hhhU literal_blockqh }q(U xml:spaceqUpreserveqh"]h#]h$]h%]h&]uh(Kh)hh]qh=X=-> print pi 3.14159 =-> # this is a comment -- from `#' to the end of line =-> p '2+3=', 2+3 # p stands for print 2+3 = 5 =-> set numeric_format='%.9f' # show 9 digits after dot =-> pr pi, pi^2, pi^3 # pr, pri and prin also stand for print 3.141592654 9.869604401 31.006276680qq}q(hUhhubaubhA)q}q(hXuUsually, one line is one command, but if it is really needed, two or more commands can be put in one line like this::hh+hhhhEh }q(h$]h%]h#]h"]h&]uh(K'h)hh]qh=XtUsually, one line is one command, but if it is really needed, two or more commands can be put in one line like this:qq}q(hXtUsually, one line is one command, but if it is really needed, two or more commands can be put in one line like this:hhubaubh)q}q(hX4=-> $a = 3; $b = 5 # two commands separated with `;'hh+hhhhh }q(hhh"]h#]h$]h%]h&]uh(K*h)hh]qh=X4=-> $a = 3; $b = 5 # two commands separated with `;'qq}q(hUhhubaubhA)q}q(hXIf the user works simultaneously with multiple datasets, she can refer to a dataset using its number: the first dataset is ``@0``, the second -- ``@1``, etc::hh+hhhhEh }q(h$]h%]h#]h"]h&]uh(K,h)hh]q(h=X{If the user works simultaneously with multiple datasets, she can refer to a dataset using its number: the first dataset is qq}q(hX{If the user works simultaneously with multiple datasets, she can refer to a dataset using its number: the first dataset is hhubh{)q}q(hX``@0``h }q(h$]h%]h#]h"]h&]uhhh]qh=X@0qq}q(hUhhubahhubh=X, the second -- qq}q(hX, the second -- hhubh{)q}q(hX``@1``h }q(h$]h%]h#]h"]h&]uhhh]qh=X@1qq}q(hUhhubahhubh=X, etc:qq}q(hX, etc:hhubeubh)q}q(hX=-> fit # perform fitting of the default dataset (the first one) =-> @2: fit # fit the third dataset (@2) =-> @*: fit # fit all datasets, one by onehh+hhhhh }q(hhh"]h#]h$]h%]h&]uh(K0h)hh]qh=X=-> fit # perform fitting of the default dataset (the first one) =-> @2: fit # fit the third dataset (@2) =-> @*: fit # fit all datasets, one by oneqq}q(hUhhubaubhA)q}q(hXCAll settings in the program are changed using the command ``set``::qhh+hhhhEh }q(h$]h%]h#]h"]h&]uh(K4h)hh]q(h=X:All settings in the program are changed using the command qDžq}q(hX:All settings in the program are changed using the command hhubh{)q}q(hX``set``h }q(h$]h%]h#]h"]h&]uhhh]qh=Xsetq΅q}q(hUhhubahhubh=X:q}q(hX:hhubeubh)q}q(hXset key = valuehh+hhhhh }q(hhh"]h#]h$]h%]h&]uh(K6h)hh]qh=Xset key = valueqׅq}q(hUhhubaubhA)q}q(hX For example::qhh+hhhhEh }q(h$]h%]h#]h"]h&]uh(K8h)hh]qh=X For example:q߅q}q(hX For example:hhubaubh)q}q(hX=-> set logfile = 'C:\log.fit' # log all commands to this file =-> set verbosity = 1 # make output from the program more verbose =-> set epsilon = 1e-14hh+hhhhh }q(hhh"]h#]h$]h%]h&]uh(K:h)hh]qh=X=-> set logfile = 'C:\log.fit' # log all commands to this file =-> set verbosity = 1 # make output from the program more verbose =-> set epsilon = 1e-14q慁q}q(hUhhubaubhA)q}q(hX+The last example changes the *ε* value, which is used to test floating-point numbers *a* and *b* for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): \|\ *a−b*\ | < *ε*.hh+hhhhEh }q(h$]h%]h#]h"]h&]uh(K>h)hh]q(h=XThe last example changes the q텁q}q(hXThe last example changes the hhubcdocutils.nodes emphasis q)q}q(hX*ε*h }q(h$]h%]h#]h"]h&]uhhh]qh=Xεq}q(hUhhubahUemphasisqubh=X5 value, which is used to test floating-point numbers qq}q(hX5 value, which is used to test floating-point numbers hhubh)q}q(hX*a*h }q(h$]h%]h#]h"]h&]uhhh]qh=Xaq}r(hUhhubahhubh=X and rr}r(hX and hhubh)r}r(hX*b*h }r(h$]h%]h#]h"]h&]uhhh]rh=Xbr}r (hUhjubahhubh=X for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): |r r }r (hX for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): \|\ hhubh)r }r(hX*a−b*h }r(h$]h%]h#]h"]h&]uhhh]rh=Xa−brr}r(hUhj ubahhubh=X| < rr}r(hX\ | < hhubh)r}r(hX*ε*h }r(h$]h%]h#]h"]h&]uhhh]rh=Xεr}r(hUhjubahhubh=X.r}r(hX.hhubeubhA)r}r (hXUTo change a setting only for one command, add ``with key=value`` before the command::hh+hhhhEh }r!(h$]h%]h#]h"]h&]uh(KCh)hh]r"(h=X.To change a setting only for one command, add r#r$}r%(hX.To change a setting only for one command, add hjubh{)r&}r'(hX``with key=value``h }r((h$]h%]h#]h"]h&]uhjh]r)h=Xwith key=valuer*r+}r,(hUhj&ubahhubh=X before the command:r-r.}r/(hX before the command:hjubeubh)r0}r1(hXm=-> with epsilon = 0.1 print pi == 3.14 # abusing epsilon 1 =-> print pi == 3.14 # default epsilon = 10^-12 0hh+hhhhh }r2(hhh"]h#]h$]h%]h&]uh(KFh)hh]r3h=Xm=-> with epsilon = 0.1 print pi == 3.14 # abusing epsilon 1 =-> print pi == 3.14 # default epsilon = 10^-12 0r4r5}r6(hUhj0ubaubcsphinx.addnodes highlightlang r7)r8}r9(hUhh+hhhU highlightlangr:h }r;(UlangXnoneUlinenothresholdI9223372036854775807 h"]h#]h$]h%]h&]uh(KLh)hh]ubhA)r<}r=(hX,Writing informally, each line has a syntax::r>hh+hhhhEh }r?(h$]h%]h#]h"]h&]uh(KMh)hh]r@h=X+Writing informally, each line has a syntax:rArB}rC(hX+Writing informally, each line has a syntax:hj<ubaubh)rD}rE(hX8[[@...:] [with ...] command [";" command]...] [#comment]hh+hhhhh }rF(hhh"]h#]h$]h%]h&]uh(KOh)hh]rGh=X8[[@...:] [with ...] command [";" command]...] [#comment]rHrI}rJ(hUhjDubaubhA)rK}rL(hXhIn scripts and in the CLI backslash (\) at the end of the line means that the next line is continuation.hh+hhhhEh }rM(h$]h%]h#]h"]h&]uh(KQh)hh]rNh=XgIn scripts and in the CLI backslash () at the end of the line means that the next line is continuation.rOrP}rQ(hXhIn scripts and in the CLI backslash (\) at the end of the line means that the next line is continuation.hjKubaubhA)rR}rS(hX4All the commands are described in the next chapters.rThh+hhhhEh }rU(h$]h%]h#]h"]h&]uh(KTh)hh]rVh=X4All the commands are described in the next chapters.rWrX}rY(hjThjRubaubcdocutils.nodes important rZ)r[}r\(hXThe rest of this section can be useful as reference, but it is recommended to **skip it** when reading the manual for the first time.hh+hhhU importantr]h }r^(h$]h%]h#]h"]h&]uh(Nh)hh]r_hA)r`}ra(hXThe rest of this section can be useful as reference, but it is recommended to **skip it** when reading the manual for the first time.hj[hhhhEh }rb(h$]h%]h#]h"]h&]uh(KXh]rc(h=XNThe rest of this section can be useful as reference, but it is recommended to rdre}rf(hXNThe rest of this section can be useful as reference, but it is recommended to hj`ubcdocutils.nodes strong rg)rh}ri(hX **skip it**h }rj(h$]h%]h#]h"]h&]uhj`h]rkh=Xskip itrlrm}rn(hUhjhubahUstrongroubh=X, when reading the manual for the first time.rprq}rr(hX, when reading the manual for the first time.hj`ubeubaubhA)rs}rt(hXATo keep the description above concise, some details were skipped.ruhh+hhhhEh }rv(h$]h%]h#]h"]h&]uh(K[h)hh]rwh=XATo keep the description above concise, some details were skipped.rxry}rz(hjuhjsubaubhA)r{}r|(hXDThe datasets listed before the colon (``:``) make a *foreach* loop::r}hh+hhhhEh }r~(h$]h%]h#]h"]h&]uh(K]h)hh]r(h=X&The datasets listed before the colon (rr}r(hX&The datasets listed before the colon (hj{ubh{)r}r(hX``:``h }r(h$]h%]h#]h"]h&]uhj{h]rh=X:r}r(hUhjubahhubh=X ) make a rr}r(hX ) make a hj{ubh)r}r(hX *foreach*h }r(h$]h%]h#]h"]h&]uhj{h]rh=Xforeachrr}r(hUhjubahhubh=X loop:rr}r(hX loop:hj{ubeubh)r}r(hX0=-> $a=0 =-> @0 @0 @0: $a={$a+1}; print $a 1 2 3hh+hhhhh }r(hhh"]h#]h$]h%]h&]uh(K_h)hh]rh=X0=-> $a=0 =-> @0 @0 @0: $a={$a+1}; print $a 1 2 3rr}r(hUhjubaubhA)r}r(hX<``@*`` stands for all datasets, from ``@0`` to the last one.rhh+hhhhEh }r(h$]h%]h#]h"]h&]uh(Keh)hh]r(h{)r}r(hX``@*``h }r(h$]h%]h#]h"]h&]uhjh]rh=X@*rr}r(hUhjubahhubh=X stands for all datasets, from rr}r(hX stands for all datasets, from hjubh{)r}r(hX``@0``h }r(h$]h%]h#]h"]h&]uhjh]rh=X@0rr}r(hUhjubahhubh=X to the last one.rr}r(hX to the last one.hjubeubhA)r}r(hXThere is a small difference between two commands in two lines and two commands separated by ``;``. The whole line is parsed before the execution begins and some checks for the second command are performed before the first command is run::hh+hhhhEh }r(h$]h%]h#]h"]h&]uh(Khh)hh]r(h=X\There is a small difference between two commands in two lines and two commands separated by rr}r(hX\There is a small difference between two commands in two lines and two commands separated by hjubh{)r}r(hX``;``h }r(h$]h%]h#]h"]h&]uhjh]rh=X;r}r(hUhjubahhubh=X. The whole line is parsed before the execution begins and some checks for the second command are performed before the first command is run:rr}r(hX. The whole line is parsed before the execution begins and some checks for the second command are performed before the first command is run:hjubeubh)r}r(hX=-> $a=4; print $a # print gives unexpected error Error: undefined variable: $a =-> $b=2 =-> $b=4; print $b # $b is already defined at the check time 4hh+hhhhh }r(hhh"]h#]h$]h%]h&]uh(Kmh)hh]rh=X=-> $a=4; print $a # print gives unexpected error Error: undefined variable: $a =-> $b=2 =-> $b=4; print $b # $b is already defined at the check time 4rr}r(hUhjubaubh*)r}r(hUhh+hhhh/h }r(h$]h%]h#]h"]rhah&]rhauh(Kvh)hh]r(h6)r}r(hXGrammarrhjhhhh:h }r(h$]h%]h#]h"]h&]uh(Kvh)hh]rh=XGrammarrr}r(hjhjubaubhA)r}r(hX/The grammar is expressed in EBNF-like notation:rhjhhhhEh }r(h$]h%]h#]h"]h&]uh(Kxh)hh]rh=X/The grammar is expressed in EBNF-like notation:rr}r(hjhjubaubcdocutils.nodes bullet_list r)r}r(hUhjhhhU bullet_listrh }r(UbulletrX*h"]h#]h$]h%]h&]uh(Kzh)hh]r(cdocutils.nodes list_item r)r}r(hX``(*this is a comment*)``rhjhhhU list_itemrh }r(h$]h%]h#]h"]h&]uh(Nh)hh]rhA)r}r(hjhjhhhhEh }r(h$]h%]h#]h"]h&]uh(Kzh]rh{)r}r(hjh }r(h$]h%]h#]h"]h&]uhjh]rh=X(*this is a comment*)rr}r(hUhjubahhubaubaubj)r}r(hX(``A*`` means 0 or more occurrences of A.rhjhhhjh }r(h$]h%]h#]h"]h&]uh(Nh)hh]rhA)r}r(hjhjhhhhEh }r(h$]h%]h#]h"]h&]uh(K{h]r(h{)r}r(hX``A*``h }r(h$]h%]h#]h"]h&]uhjh]rh=XA*r r }r (hUhjubahhubh=X" means 0 or more occurrences of A.r r }r(hX" means 0 or more occurrences of A.hjubeubaubj)r}r(hX(``A+`` means 1 or more occurrences of A.rhjhhhjh }r(h$]h%]h#]h"]h&]uh(Nh)hh]rhA)r}r(hjhjhhhhEh }r(h$]h%]h#]h"]h&]uh(K|h]r(h{)r}r(hX``A+``h }r(h$]h%]h#]h"]h&]uhjh]rh=XA+rr}r(hUhjubahhubh=X" means 1 or more occurrences of A.rr }r!(hX" means 1 or more occurrences of A.hjubeubaubj)r"}r#(hX``A % B`` means ``A (B A)*`` and the ``%`` operator has the highest precedence. For example: ``term % "+" comment`` is the same as ``term ("+" term)* comment``.hjhhhjh }r$(h$]h%]h#]h"]h&]uh(Nh)hh]r%hA)r&}r'(hX``A % B`` means ``A (B A)*`` and the ``%`` operator has the highest precedence. For example: ``term % "+" comment`` is the same as ``term ("+" term)* comment``.hj"hhhhEh }r((h$]h%]h#]h"]h&]uh(K}h]r)(h{)r*}r+(hX ``A % B``h }r,(h$]h%]h#]h"]h&]uhj&h]r-h=XA % Br.r/}r0(hUhj*ubahhubh=X means r1r2}r3(hX means hj&ubh{)r4}r5(hX ``A (B A)*``h }r6(h$]h%]h#]h"]h&]uhj&h]r7h=XA (B A)*r8r9}r:(hUhj4ubahhubh=X and the r;r<}r=(hX and the hj&ubh{)r>}r?(hX``%``h }r@(h$]h%]h#]h"]h&]uhj&h]rAh=X%rB}rC(hUhj>ubahhubh=X3 operator has the highest precedence. For example: rDrE}rF(hX3 operator has the highest precedence. For example: hj&ubh{)rG}rH(hX``term % "+" comment``h }rI(h$]h%]h#]h"]h&]uhj&h]rJh=Xterm % "+" commentrKrL}rM(hUhjGubahhubh=X is the same as rNrO}rP(hX is the same as hj&ubh{)rQ}rR(hX``term ("+" term)* comment``h }rS(h$]h%]h#]h"]h&]uhj&h]rTh=Xterm ("+" term)* commentrUrV}rW(hUhjQubahhubh=X.rX}rY(hX.hj&ubeubaubj)rZ}r[(hXThe colon ':' in quoted string means that the string can be shortened, e.g. ``"del:ete"`` means that any of ``del``, ``dele``, ``delet`` and ``delete`` can be used. hjhhhjh }r\(h$]h%]h#]h"]h&]uh(Nh)hh]r]hA)r^}r_(hXThe colon ':' in quoted string means that the string can be shortened, e.g. ``"del:ete"`` means that any of ``del``, ``dele``, ``delet`` and ``delete`` can be used.hjZhhhhEh }r`(h$]h%]h#]h"]h&]uh(Kh]ra(h=XLThe colon ':' in quoted string means that the string can be shortened, e.g. rbrc}rd(hXLThe colon ':' in quoted string means that the string can be shortened, e.g. hj^ubh{)re}rf(hX ``"del:ete"``h }rg(h$]h%]h#]h"]h&]uhj^h]rhh=X "del:ete"rirj}rk(hUhjeubahhubh=X means that any of rlrm}rn(hX means that any of hj^ubh{)ro}rp(hX``del``h }rq(h$]h%]h#]h"]h&]uhj^h]rrh=Xdelrsrt}ru(hUhjoubahhubh=X, rvrw}rx(hX, hj^ubh{)ry}rz(hX``dele``h }r{(h$]h%]h#]h"]h&]uhj^h]r|h=Xdeler}r~}r(hUhjyubahhubh=X, rr}r(hX, hj^ubh{)r}r(hX ``delet``h }r(h$]h%]h#]h"]h&]uhj^h]rh=Xdeletrr}r(hUhjubahhubh=X and rr}r(hX and hj^ubh{)r}r(hX ``delete``h }r(h$]h%]h#]h"]h&]uhj^h]rh=Xdeleterr}r(hUhjubahhubh=X can be used.rr}r(hX can be used.hj^ubeubaubeubhA)r}r(hXThe functions that can be used in ``p_expr`` and ``v_expr`` are available :ref:`here ` and :ref:`here `, respectively. ``v_expr`` contains only a subset of functions from ``p_expr`` (partly, because we need to calculate symbolical derivatives of ``v_expr``)hjhhhhEh }r(h$]h%]h#]h"]h&]uh(Kh)hh]r(h=X"The functions that can be used in rr}r(hX"The functions that can be used in hjubh{)r}r(hX ``p_expr``h }r(h$]h%]h#]h"]h&]uhjh]rh=Xp_exprrr}r(hUhjubahhubh=X and rr}r(hX and hjubh{)r}r(hX ``v_expr``h }r(h$]h%]h#]h"]h&]uhjh]rh=Xv_exprrr}r(hUhjubahhubh=X are available rr}r(hX are available hjubcsphinx.addnodes pending_xref r)r}r(hX:ref:`here `rhjhhhU pending_xrefrh }r(UreftypeXrefUrefwarnrU reftargetrX transformU refdomainXstdrh"]h#]U refexplicith$]h%]h&]UrefdocrXlangruh(Kh]rcdocutils.nodes inline r)r}r(hjh }r(h$]h%]r(UxrefrjXstd-refreh#]h"]h&]uhjh]rh=Xhererr}r(hUhjubahUinlinerubaubh=X and rr}r(hX and hjubj)r}r(hX:ref:`here `rhjhhhjh }r(UreftypeXrefjjX variablesU refdomainXstdrh"]h#]U refexplicith$]h%]h&]jjuh(Kh]rj)r}r(hjh }r(h$]h%]r(jjXstd-refreh#]h"]h&]uhjh]rh=Xhererr}r(hUhjubahjubaubh=X, respectively. rr}r(hX, respectively. hjubh{)r}r(hX ``v_expr``h }r(h$]h%]h#]h"]h&]uhjh]rh=Xv_exprrr}r(hUhjubahhubh=X* contains only a subset of functions from rr}r(hX* contains only a subset of functions from hjubh{)r}r(hX ``p_expr``h }r(h$]h%]h#]h"]h&]uhjh]rh=Xp_exprrr}r(hUhjubahhubh=XA (partly, because we need to calculate symbolical derivatives of rr}r(hXA (partly, because we need to calculate symbolical derivatives of hjubh{)r}r(hX ``v_expr``h }r(h$]h%]h#]h"]h&]uhjh]rh=Xv_exprrr}r(hUhjubahhubh=X)r}r(hX)hjubeubhA)r}r(hX**Line structure**rhjhhhhEh }r(h$]h%]h#]h"]h&]uh(Kh)hh]rjg)r}r(hjh }r(h$]h%]h#]h"]h&]uhjh]rh=XLine structurerr}r(hUhjubahjoubaubcsphinx.addnodes productionlist r)r }r (hUhjhhhUproductionlistr h }r (h$]h%]h#]h"]h&]uh(Kh)hh]r (csphinx.addnodes production r)r}r(hUh }r(U tokennamerXlinerh"]rXgrammar-token-linerah#]h$]h%]h&]uhj h]r(h=X [rr}r(hX [hjubj)r}r(hX statementh }r(UreftypeUtokenrU reftargetX statementU refdomainUstdrh"]h#]h$]h%]h&]uhjh]rh{)r }r!(hX statementh }r"(h$]h%]r#jah#]h"]h&]uhjh]r$h=X statementr%r&}r'(hUhj ubahhubahjubh=X] [r(r)}r*(hX] [hjubj)r+}r,(hXcommenth }r-(UreftypejU reftargetXcommentU refdomainjh"]h#]h$]h%]h&]uhjh]r.h{)r/}r0(hXcommenth }r1(h$]h%]r2jah#]h"]h&]uhj+h]r3h=Xcommentr4r5}r6(hUhj/ubahhubahjubh=X]r7}r8(hUhjubehU productionr9ubj)r:}r;(hUh }r<(jX statementr=h"]r>Xgrammar-token-statementr?ah#]h$]h%]h&]uhj h]r@(h=X [Dataset+ ":"] [rArB}rC(hX [Dataset+ ":"] [hj:ubj)rD}rE(hX with_optsh }rF(UreftypejU reftargetX with_optsU refdomainjh"]h#]h$]h%]h&]uhj:h]rGh{)rH}rI(hX with_optsh }rJ(h$]h%]rKjah#]h"]h&]uhjDh]rLh=X with_optsrMrN}rO(hUhjHubahhubahjubh=X] rPrQ}rR(hX] hj:ubj)rS}rT(hXcommandh }rU(UreftypejU reftargetXcommandU refdomainjh"]h#]h$]h%]h&]uhj:h]rVh{)rW}rX(hXcommandh }rY(h$]h%]rZjah#]h"]h&]uhjSh]r[h=Xcommandr\r]}r^(hUhjWubahhubahjubh=X % ";"r_r`}ra(hUhj:ubehj9ubj)rb}rc(hUh }rd(jX with_optsreh"]rfXgrammar-token-with_optsrgah#]h$]h%]h&]uhj h]rh(h=X "w:ith" (Lname "=" rirj}rk(hX "w:ith" (Lname "=" hjbubj)rl}rm(hXvalueh }rn(UreftypejU reftargetXvalueU refdomainjh"]h#]h$]h%]h&]uhjbh]roh{)rp}rq(hXvalueh }rr(h$]h%]rsjah#]h"]h&]uhjlh]rth=Xvaluerurv}rw(hUhjpubahhubahjubh=X) % ","rxry}rz(hUhjbubehj9ubj)r{}r|(hUh }r}(jXcommentr~h"]rXgrammar-token-commentrah#]h$]h%]h&]uhj h]rh=X "#" AllChars*rr}r(hUhj{ubahj9ubeubhA)r}r(hX **Commands**rhjhhhhEh }r(h$]h%]h#]h"]h&]uh(Kh)hh]rjg)r}r(hjh }r(h$]h%]h#]h"]h&]uhjh]rh=XCommandsrr}r(hUhjubahjoubaubhA)r}r(hXDThe kCmd* names in the comments correspond to constants in the code.rhjhhhhEh }r(h$]h%]h#]h"]h&]uh(Kh)hh]rh=XDThe kCmd* names in the comments correspond to constants in the code.rr}r(hjhjubaubj)r}r(hUhjhhhj h }r(h$]h%]h#]h"]h&]uh(Kh)hh]r(j)r}r(hUh }r(jXcommandrh"]rXgrammar-token-commandrah#]h$]h%]h&]uhjh]rh=X (rr}r(hUhjubahj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X$ "deb:ug" RestOfLine | rr}r(hUhjubh)r}r(hX (*kCmdDebug*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdDebug*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X "def:ine" rr}r(hX "def:ine" hjubj)r}r(hXdefineh }r(UreftypejU reftargetXdefineU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXdefineh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xdefinerr}r(hUhjubahhubahjubh=X | rr}r(hUhjubh)r}r(hX(*kCmdDefine*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X(*kCmdDefine*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X "del:ete" rr}r(hX "del:ete" hjubj)r}r(hXdeleteh }r(UreftypejU reftargetXdeleteU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXdeleteh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xdeleterr}r(hUhjubahhubahjubh=X | rr}r(hUhjubh)r}r(hX(*kCmdDelete*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X(*kCmdDelete*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X "del:ete" rr}r(hX "del:ete" hjubj)r}r(hX delete_pointsh }r(UreftypejU reftargetX delete_pointsU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hX delete_pointsh }r(h$]h%]rjah#]h"]h&]uhjh]rh=X delete_pointsrr}r(hUhjubahhubahjubh=X | rr}r(hUhjubh)r}r(hX(*kCmdDeleteP*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X(*kCmdDeleteP*)r r }r (hUhjubahhubehj9ubj)r }r (hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X "e:xecute" rr}r(hX "e:xecute" hj ubj)r}r(hXexech }r(UreftypejU reftargetXexecU refdomainjh"]h#]h$]h%]h&]uhj h]rh{)r}r(hXexech }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xexecrr}r(hUhjubahhubahjubh=X | rr }r!(hUhj ubh)r"}r#(hX (*kCmdExec*)h }r$(h$]h%]h#]h"]h&]uhj h]r%h=X (*kCmdExec*)r&r'}r((hUhj"ubahhubehj9ubj)r)}r*(hUh }r+(jXh"]h#]h$]h%]h&]uhjh]r,(h=X "f:it" r-r.}r/(hX "f:it" hj)ubj)r0}r1(hXfith }r2(UreftypejU reftargetXfitU refdomainjh"]h#]h$]h%]h&]uhj)h]r3h{)r4}r5(hXfith }r6(h$]h%]r7jah#]h"]h&]uhj0h]r8h=Xfitr9r:}r;(hUhj4ubahhubahjubh=X | r<r=}r>(hUhj)ubh)r?}r@(hX (*kCmdFit*)h }rA(h$]h%]h#]h"]h&]uhj)h]rBh=X (*kCmdFit*)rCrD}rE(hUhj?ubahhubehj9ubj)rF}rG(hUh }rH(jXh"]h#]h$]h%]h&]uhjh]rI(h=X "g:uess" rJrK}rL(hX "g:uess" hjFubj)rM}rN(hXguessh }rO(UreftypejU reftargetXguessU refdomainjh"]h#]h$]h%]h&]uhjFh]rPh{)rQ}rR(hXguessh }rS(h$]h%]rTjah#]h"]h&]uhjMh]rUh=XguessrVrW}rX(hUhjQubahhubahjubh=X | rYrZ}r[(hUhjFubh)r\}r](hX (*kCmdGuess*)h }r^(h$]h%]h#]h"]h&]uhjFh]r_h=X (*kCmdGuess*)r`ra}rb(hUhj\ubahhubehj9ubj)rc}rd(hUh }re(jXh"]h#]h$]h%]h&]uhjh]rf(h=X "i:nfo" rgrh}ri(hX "i:nfo" hjcubj)rj}rk(hXinfo_argh }rl(UreftypejU reftargetXinfo_argU refdomainjh"]h#]h$]h%]h&]uhjch]rmh{)rn}ro(hXinfo_argh }rp(h$]h%]rqjah#]h"]h&]uhjjh]rrh=Xinfo_argrsrt}ru(hUhjnubahhubahjubh=X % "," [rvrw}rx(hX % "," [hjcubj)ry}rz(hXredirh }r{(UreftypejU reftargetXredirU refdomainjh"]h#]h$]h%]h&]uhjch]r|h{)r}}r~(hXredirh }r(h$]h%]rjah#]h"]h&]uhjyh]rh=Xredirrr}r(hUhj}ubahhubahjubh=X] | rr}r(hUhjcubh)r}r(hX (*kCmdInfo*)h }r(h$]h%]h#]h"]h&]uhjch]rh=X (*kCmdInfo*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X$ "l:ua" RestOfLine | rr}r(hUhjubh)r}r(hX (*kCmdLua*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdLua*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X$ "=" RestOfLine | rr}r(hUhjubh)r}r(hX (*kCmdLua*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdLua*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X "pl:ot" [rr}r(hX "pl:ot" [hjubj)r}r(hXrangeh }r(UreftypejU reftargetXrangeU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXrangeh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xrangerr}r(hUhjubahhubahjubh=X] [rr}r(hX] [hjubj)r}r(hXrangeh }r(UreftypejU reftargetXrangeU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXrangeh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xrangerr}r(hUhjubahhubahjubh=X ] Dataset* | rr}r(hUhjubh)r}r(hX (*kCmdPlot*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdPlot*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X "p:rint" rr}r(hX "p:rint" hjubj)r}r(hX print_argsh }r(UreftypejU reftargetX print_argsU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hX print_argsh }r(h$]h%]rjah#]h"]h&]uhjh]rh=X print_argsrr}r(hUhjubahhubahjubh=X [rr}r(hX [hjubj)r}r(hXredirh }r(UreftypejU reftargetXredirU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXredirh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xredirrr}r(hUhjubahhubahjubh=X ] | rr}r(hUhjubh)r}r(hX (*kCmdPrint*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdPrint*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X$ "quit" | rr}r (hUhjubh)r }r (hX (*kCmdQuit*)h }r (h$]h%]h#]h"]h&]uhjh]r h=X (*kCmdQuit*)rr}r(hUhj ubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X$ "reset" | rr}r(hUhjubh)r}r(hX (*kCmdReset*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdReset*)rr}r(hUhjubahhubehj9ubj)r}r (hUh }r!(jXh"]h#]h$]h%]h&]uhjh]r"(h=X "s:et" (Lname "=" r#r$}r%(hX "s:et" (Lname "=" hjubj)r&}r'(hXvalueh }r((UreftypejU reftargetXvalueU refdomainjh"]h#]h$]h%]h&]uhjh]r)h{)r*}r+(hXvalueh }r,(h$]h%]r-jah#]h"]h&]uhj&h]r.h=Xvaluer/r0}r1(hUhj*ubahhubahjubh=X ) % "," | r2r3}r4(hUhjubh)r5}r6(hX (*kCmdSet*)h }r7(h$]h%]h#]h"]h&]uhjh]r8h=X (*kCmdSet*)r9r:}r;(hUhj5ubahhubehj9ubj)r<}r=(hUh }r>(jXh"]h#]h$]h%]h&]uhjh]r?(h=X "sleep" r@rA}rB(hX "sleep" hj<ubj)rC}rD(hXexprh }rE(UreftypejU reftargetXexprU refdomainjh"]h#]h$]h%]h&]uhj<h]rFh{)rG}rH(hXexprh }rI(h$]h%]rJjah#]h"]h&]uhjCh]rKh=XexprrLrM}rN(hUhjGubahhubahjubh=X | rOrP}rQ(hUhj<ubh)rR}rS(hX (*kCmdSleep*)h }rT(h$]h%]h#]h"]h&]uhj<h]rUh=X (*kCmdSleep*)rVrW}rX(hUhjRubahhubehj9ubj)rY}rZ(hUh }r[(jXh"]h#]h$]h%]h&]uhjh]r\(h=X "title" "=" r]r^}r_(hX "title" "=" hjYubj)r`}ra(hXfilenameh }rb(UreftypejU reftargetXfilenameU refdomainjh"]h#]h$]h%]h&]uhjYh]rch{)rd}re(hXfilenameh }rf(h$]h%]rgjah#]h"]h&]uhj`h]rhh=Xfilenamerirj}rk(hUhjdubahhubahjubh=X | rlrm}rn(hUhjYubh)ro}rp(hX (*kCmdTitle*)h }rq(h$]h%]h#]h"]h&]uhjYh]rrh=X (*kCmdTitle*)rsrt}ru(hUhjoubahhubehj9ubj)rv}rw(hUh }rx(jXh"]h#]h$]h%]h&]uhjh]ry(h=X$ "undef:ine" Uname % "," | rzr{}r|(hUhjvubh)r}}r~(hX (*kCmdUndef*)h }r(h$]h%]h#]h"]h&]uhjvh]rh=X (*kCmdUndef*)rr}r(hUhj}ubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X$ "use" Dataset | rr}r(hUhjubh)r}r(hX (*kCmdUse*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdUse*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X$ "!" RestOfLine | rr}r(hUhjubh)r}r(hX (*kCmdShell*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdShell*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X Dataset "<" rr}r(hX Dataset "<" hjubj)r}r(hXload_argh }r(UreftypejU reftargetXload_argU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXload_argh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xload_argrr}r(hUhjubahhubahjubh=X | rr}r(hUhjubh)r}r(hX (*kCmdLoad*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X (*kCmdLoad*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X Dataset "=" rr}r(hX Dataset "=" hjubj)r}r(hX dataset_exprh }r(UreftypejU reftargetX dataset_exprU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hX dataset_exprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=X dataset_exprrr}r(hUhjubahhubahjubh=X | rr}r(hUhjubh)r}r(hX(*kCmdDatasetTr*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X(*kCmdDatasetTr*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X Funcname "=" rr}r(hX Funcname "=" hjubj)r}r(hXfunc_rhsh }r(UreftypejU reftargetXfunc_rhsU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXfunc_rhsh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xfunc_rhsrr}r(hUhjubahhubahjubh=X | rr}r(hUhjubh)r}r(hX(*kCmdNameFunc*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X(*kCmdNameFunc*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X r}r(hX hjubj)r}r(hX param_lhsh }r(UreftypejU reftargetX param_lhsU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hX param_lhsh }r(h$]h%]rjah#]h"]h&]uhjh]rh=X param_lhsrr}r(hUhjubahhubahjubh=X "=" r r }r (hX "=" hjubj)r }r (hXv_exprh }r(UreftypejU reftargetXv_exprU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXv_exprh }r(h$]h%]rjah#]h"]h&]uhj h]rh=Xv_exprrr}r(hUhjubahhubahjubh=X | rr}r(hUhjubh)r}r(hX(*kCmdAssignParam*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X(*kCmdAssignParam*)rr }r!(hUhjubahhubehj9ubj)r"}r#(hUh }r$(jXh"]h#]h$]h%]h&]uhjh]r%(h=X Varname "=" r&r'}r((hX Varname "=" hj"ubj)r)}r*(hXv_exprh }r+(UreftypejU reftargetXv_exprU refdomainjh"]h#]h$]h%]h&]uhj"h]r,h{)r-}r.(hXv_exprh }r/(h$]h%]r0jah#]h"]h&]uhj)h]r1h=Xv_exprr2r3}r4(hUhj-ubahhubahjubh=X | r5r6}r7(hUhj"ubh)r8}r9(hX(*kCmdNameVar*)h }r:(h$]h%]h#]h"]h&]uhj"h]r;h=X(*kCmdNameVar*)r<r=}r>(hUhj8ubahhubehj9ubj)r?}r@(hUh }rA(jXh"]h#]h$]h%]h&]uhjh]rB(h=X rC}rD(hX hj?ubj)rE}rF(hXmodel_idh }rG(UreftypejU reftargetXmodel_idU refdomainjh"]h#]h$]h%]h&]uhj?h]rHh{)rI}rJ(hXmodel_idh }rK(h$]h%]rLjah#]h"]h&]uhjEh]rMh=Xmodel_idrNrO}rP(hUhjIubahhubahjubh=X ("="|"+=") rQrR}rS(hX ("="|"+=") hj?ubj)rT}rU(hX model_rhsh }rV(UreftypejU reftargetX model_rhsU refdomainjh"]h#]h$]h%]h&]uhj?h]rWh{)rX}rY(hX model_rhsh }rZ(h$]h%]r[jah#]h"]h&]uhjTh]r\h=X model_rhsr]r^}r_(hUhjXubahhubahjubh=X | r`ra}rb(hUhj?ubh)rc}rd(hX(*kCmdChangeModel*)h }re(h$]h%]h#]h"]h&]uhj?h]rfh=X(*kCmdChangeModel*)rgrh}ri(hUhjcubahhubehj9ubj)rj}rk(hUh }rl(jXh"]h#]h$]h%]h&]uhjh]rm(h=X (rnro}rp(hX (hjjubj)rq}rr(hXp_attrh }rs(UreftypejU reftargetXp_attrU refdomainjh"]h#]h$]h%]h&]uhjjh]rth{)ru}rv(hXp_attrh }rw(h$]h%]rxjah#]h"]h&]uhjqh]ryh=Xp_attrrzr{}r|(hUhjuubahhubahjubh=X "[" r}r~}r(hX "[" hjjubj)r}r(hXexprh }r(UreftypejU reftargetXexprU refdomainjh"]h#]h$]h%]h&]uhjjh]rh{)r}r(hXexprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xexprrr}r(hUhjubahhubahjubh=X "]" "=" rr}r(hX "]" "=" hjjubj)r}r(hXp_exprh }r(UreftypejU reftargetXp_exprU refdomainjh"]h#]h$]h%]h&]uhjjh]rh{)r}r(hXp_exprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xp_exprrr}r(hUhjubahhubahjubh=X ) % "," | rr}r(hUhjjubh)r}r(hX(*kCmdPointTr*)h }r(h$]h%]h#]h"]h&]uhjjh]rh=X(*kCmdPointTr*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X (rr}r(hX (hjubj)r}r(hXp_attrh }r(UreftypejU reftargetXp_attrU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXp_attrh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xp_attrrr}r(hUhjubahhubahjubh=X "=" rr}r(hX "=" hjubj)r}r(hXp_exprh }r(UreftypejU reftargetXp_exprU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXp_exprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xp_exprrr}r(hUhjubahhubahjubh=X) % "," | rr}r(hUhjubh)r}r(hX(*kCmdAllPointsTr*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X(*kCmdAllPointsTr*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X "M" "=" rr}r(hX "M" "=" hjubj)r}r(hXexprh }r(UreftypejU reftargetXexprU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXexprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xexprrr}r(hUhjubahhubahjubh=X ) rr}r(hUhjubh)r}r(hX(*kCmdResizeP*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X(*kCmdResizeP*)rr}r(hUhjubahhubehj9ubeubhA)r}r(hX**Other rules**rhjhhhhEh }r(h$]h%]h#]h"]h&]uh(Kh)hh]rjg)r}r(hjh }r(h$]h%]h#]h"]h&]uhjh]rh=X Other rulesrr}r(hUhjubahjoubaubj)r}r(hUhjhhhj h }r(h$]h%]h#]h"]h&]uh(Kh)hh]r(j)r}r(hUh }r(jXdefinerh"]rXgrammar-token-definerah#]h$]h%]h&]uhjh]r(h=X Uname "(" (Lname [ "=" rr}r(hX Uname "(" (Lname [ "=" hjubj)r}r (hXv_exprh }r (UreftypejU reftargetXv_exprU refdomainjh"]h#]h$]h%]h&]uhjh]r h{)r }r (hXv_exprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xv_exprrr}r(hUhj ubahhubahjubh=X]) % "," ")" "="rr}r(hUhjubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X ( rr}r(hX ( hjubj)r}r(hXv_exprh }r (UreftypejU reftargetXv_exprU refdomainjh"]h#]h$]h%]h&]uhjh]r!h{)r"}r#(hXv_exprh }r$(h$]h%]r%jah#]h"]h&]uhjh]r&h=Xv_exprr'r(}r)(hUhj"ubahhubahjubh=X |r*r+}r,(hUhjubehj9ubj)r-}r.(hUh }r/(jXh"]h#]h$]h%]h&]uhjh]r0(h=X r1r2}r3(hX hj-ubj)r4}r5(hXcomponent_funch }r6(UreftypejU reftargetXcomponent_funcU refdomainjh"]h#]h$]h%]h&]uhj-h]r7h{)r8}r9(hXcomponent_funch }r:(h$]h%]r;jah#]h"]h&]uhj4h]r<h=Xcomponent_funcr=r>}r?(hUhj8ubahhubahjubh=X % "+" |r@rA}rB(hUhj-ubehj9ubj)rC}rD(hUh }rE(jXh"]h#]h$]h%]h&]uhjh]rF(h=X "x" "<" rGrH}rI(hX "x" "<" hjCubj)rJ}rK(hXv_exprh }rL(UreftypejU reftargetXv_exprU refdomainjh"]h#]h$]h%]h&]uhjCh]rMh{)rN}rO(hXv_exprh }rP(h$]h%]rQjah#]h"]h&]uhjJh]rRh=Xv_exprrSrT}rU(hUhjNubahhubahjubh=X "?" rVrW}rX(hX "?" hjCubj)rY}rZ(hXcomponent_funch }r[(UreftypejU reftargetXcomponent_funcU refdomainjh"]h#]h$]h%]h&]uhjCh]r\h{)r]}r^(hXcomponent_funch }r_(h$]h%]r`jah#]h"]h&]uhjYh]rah=Xcomponent_funcrbrc}rd(hUhj]ubahhubahjubh=X ":" rerf}rg(hX ":" hjCubj)rh}ri(hXcomponent_funch }rj(UreftypejU reftargetXcomponent_funcU refdomainjh"]h#]h$]h%]h&]uhjCh]rkh{)rl}rm(hXcomponent_funch }rn(h$]h%]rojah#]h"]h&]uhjhh]rph=Xcomponent_funcrqrr}rs(hUhjlubahhubahjubehj9ubj)rt}ru(hUh }rv(jXh"]h#]h$]h%]h&]uhjh]rwh=X )rxry}rz(hUhjtubahj9ubj)r{}r|(hUh }r}(jXcomponent_funcr~h"]rXgrammar-token-component_funcrah#]h$]h%]h&]uhjh]r(h=X Uname "(" rr}r(hX Uname "(" hj{ubj)r}r(hXv_exprh }r(UreftypejU reftargetXv_exprU refdomainjh"]h#]h$]h%]h&]uhj{h]rh{)r}r(hXv_exprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xv_exprrr}r(hUhjubahhubahjubh=X % "," ")"rr}r(hUhj{ubehj9ubj)r}r(hUh }r(jXdeleterh"]rXgrammar-token-deleterah#]h$]h%]h&]uhjh]r(h=X (Varname | rr}r(hX (Varname | hjubj)r}r(hXfunc_idh }r(UreftypejU reftargetXfunc_idU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXfunc_idh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xfunc_idrr}r(hUhjubahhubahjubh=X | Dataset | "file" rr}r(hX | Dataset | "file" hjubj)r}r(hXfilenameh }r(UreftypejU reftargetXfilenameU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXfilenameh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xfilenamerr}r(hUhjubahhubahjubh=X) % ","rr}r(hUhjubehj9ubj)r}r(hUh }r(jX delete_pointsrh"]rXgrammar-token-delete_pointsrah#]h$]h%]h&]uhjh]r(h=X "(" rr}r(hX "(" hjubj)r}r(hXp_exprh }r(UreftypejU reftargetXp_exprU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXp_exprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xp_exprrr}r(hUhjubahhubahjubh=X ")"rr}r(hUhjubehj9ubj)r}r(hUh }r(jXexecrh"]rXgrammar-token-execrah#]h$]h%]h&]uhjh]r(h=X r}r(hX hjubj)r}r(hXfilenameh }r(UreftypejU reftargetXfilenameU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXfilenameh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xfilenamerr}r(hUhjubahhubahjubh=X |rr}r(hUhjubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]rh=X "!" RestOfLine |rr}r(hUhjubahj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]rh=X "=" RestOfLinerr}r(hUhjubahj9ubj)r}r(hUh }r(jXfitrh"]rXgrammar-token-fitrah#]h$]h%]h&]uhjh]rh=X [Number] [Dataset*] |rr}r(hUhjubahj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]rh=X "+" Number |r r }r (hUhjubahj9ubj)r }r (hUh }r(jXh"]h#]h$]h%]h&]uhjh]rh=X "undo" |rr}r(hUhj ubahj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]rh=X "redo" |rr}r(hUhjubahj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]rh=X "history" Number |rr}r (hUhjubahj9ubj)r!}r"(hUh }r#(jXh"]h#]h$]h%]h&]uhjh]r$h=X "clear_history"r%r&}r'(hUhj!ubahj9ubj)r(}r)(hUh }r*(jXguessr+h"]r,Xgrammar-token-guessr-ah#]h$]h%]h&]uhjh]r.(h=X& [Funcname "="] Uname ["(" (Lname "=" r/r0}r1(hX& [Funcname "="] Uname ["(" (Lname "=" hj(ubj)r2}r3(hXv_exprh }r4(UreftypejU reftargetXv_exprU refdomainjh"]h#]h$]h%]h&]uhj(h]r5h{)r6}r7(hXv_exprh }r8(h$]h%]r9jah#]h"]h&]uhj2h]r:h=Xv_exprr;r<}r=(hUhj6ubahhubahjubh=X) % "," ")"] [r>r?}r@(hX) % "," ")"] [hj(ubj)rA}rB(hXrangeh }rC(UreftypejU reftargetXrangeU refdomainjh"]h#]h$]h%]h&]uhj(h]rDh{)rE}rF(hXrangeh }rG(h$]h%]rHjah#]h"]h&]uhjAh]rIh=XrangerJrK}rL(hUhjEubahhubahjubh=X]rM}rN(hUhj(ubehj9ubj)rO}rP(hUh }rQ(jXinfo_argrRh"]rSXgrammar-token-info_argrTah#]h$]h%]h&]uhjh]rUh=X ...TODOrVrW}rX(hUhjOubahj9ubj)rY}rZ(hUh }r[(jX print_argsr\h"]r]Xgrammar-token-print_argsr^ah#]h$]h%]h&]uhjh]r_(h=X [("all" | ("if" r`ra}rb(hX [("all" | ("if" hjYubj)rc}rd(hXp_exprh }re(UreftypejU reftargetXp_exprU refdomainjh"]h#]h$]h%]h&]uhjYh]rfh{)rg}rh(hXp_exprh }ri(h$]h%]rjjah#]h"]h&]uhjch]rkh=Xp_exprrlrm}rn(hUhjgubahhubahjubh=X ":")]rorp}rq(hUhjYubehj9ubj)rr}rs(hUh }rt(jXh"]h#]h$]h%]h&]uhjh]ru(h=X (rvrw}rx(hX (hjrubj)ry}rz(hXp_exprh }r{(UreftypejU reftargetXp_exprU refdomainjh"]h#]h$]h%]h&]uhjrh]r|h{)r}}r~(hXp_exprh }r(h$]h%]rjah#]h"]h&]uhjyh]rh=Xp_exprrr}r(hUhj}ubahhubahjubh=X- | QuotedString | "title" | "filename") % ","rr}r(hUhjrubehj9ubj)r}r(hUh }r(jXredirrh"]rXgrammar-token-redirrah#]h$]h%]h&]uhjh]r(h=X (">"|">>") rr}r(hX (">"|">>") hjubj)r}r(hXfilenameh }r(UreftypejU reftargetXfilenameU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXfilenameh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xfilenamerr}r(hUhjubahhubahjubehj9ubj)r}r(hUh }r(jXvaluerh"]rXgrammar-token-valuerah#]h$]h%]h&]uhjh]r(h=X (Lname | QuotedString | rr}r(hX (Lname | QuotedString | hjubj)r}r(hXexprh }r(UreftypejU reftargetXexprU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXexprh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xexprrr}r(hUhjubahhubahjubh=X) rr}r(hUhjubh)r}r(hX$(*value type depends on the option*)h }r(h$]h%]h#]h"]h&]uhjh]rh=X$(*value type depends on the option*)rr}r(hUhjubahhubehj9ubj)r}r(hUh }r(jX model_rhsrh"]rXgrammar-token-model_rhsrah#]h$]h%]h&]uhjh]rh=X "0" |rr}r(hUhjubahj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X r}r(hX hjubj)r}r(hXfunc_idh }r(UreftypejU reftargetXfunc_idU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXfunc_idh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xfunc_idrr}r(hUhjubahhubahjubh=X |rr}r(hUhjubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X r}r(hX hjubj)r}r(hXfunc_rhsh }r(UreftypejU reftargetXfunc_rhsU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXfunc_rhsh }r(h$]h%]rjah#]h"]h&]uhjh]rh=Xfunc_rhsrr}r(hUhjubahhubahjubh=X |rr}r(hUhjubehj9ubj)r}r(hUh }r(jXh"]h#]h$]h%]h&]uhjh]r(h=X r}r(hX hjubj)r}r(hXmodel_idh }r(UreftypejU reftargetXmodel_idU refdomainjh"]h#]h$]h%]h&]uhjh]rh{)r}r(hXmodel_idh }r(h$]h%]rjah#]h"]h&]uhjh]r h=Xmodel_idr r }r (hUhjubahhubahjubh=X |r r }r (hUhjubehj9ubj)r }r (hUh }r (jXh"]h#]h$]h%]h&]uhjh]r (h=X "copy" "(" r r }r (hX "copy" "(" hj ubj)r }r (hXmodel_idh }r (UreftypejU reftargetXmodel_idU refdomainjh"]h#]h$]h%]h&]uhj h]r h{)r }r (hXmodel_idh }r (h$]h%]r jah#]h"]h&]uhj h]r h=Xmodel_idr r }r (hUhj ubahhubahjubh=X ")"r r }r (hUhj ubehj9ubj)r }r (hUh }r (jXfunc_rhsr h"]r! Xgrammar-token-func_rhsr" ah#]h$]h%]h&]uhjh]r# (h=X Uname "(" ([Lname "="] r$ r% }r& (hX Uname "(" ([Lname "="] hj ubj)r' }r( (hXv_exprh }r) (UreftypejU reftargetXv_exprU refdomainjh"]h#]h$]h%]h&]uhj h]r* h{)r+ }r, (hXv_exprh }r- (h$]h%]r. jah#]h"]h&]uhj' h]r/ h=Xv_exprr0 r1 }r2 (hUhj+ ubahhubahjubh=X ) % "," ")" |r3 r4 }r5 (hUhj ubehj9ubj)r6 }r7 (hUh }r8 (jXh"]h#]h$]h%]h&]uhjh]r9 (h=X "copy" "(" r: r; }r< (hX "copy" "(" hj6 ubj)r= }r> (hXfunc_idh }r? (UreftypejU reftargetXfunc_idU refdomainjh"]h#]h$]h%]h&]uhj6 h]r@ h{)rA }rB (hXfunc_idh }rC (h$]h%]rD jah#]h"]h&]uhj= h]rE h=Xfunc_idrF rG }rH (hUhjA ubahhubahjubh=X ")"rI rJ }rK (hUhj6 ubehj9ubj)rL }rM (hUh }rN (jXload_argrO h"]rP Xgrammar-token-load_argrQ ah#]h$]h%]h&]uhjh]rR (h=X rS }rT (hX hjL ubj)rU }rV (hXfilenameh }rW (UreftypejU reftargetXfilenameU refdomainjh"]h#]h$]h%]h&]uhjL h]rX h{)rY }rZ (hXfilenameh }r[ (h$]h%]r\ jah#]h"]h&]uhjU h]r] h=Xfilenamer^ r_ }r` (hUhjY ubahhubahjubh=X Lname* |ra rb }rc (hUhjL ubehj9ubj)rd }re (hUh }rf (jXh"]h#]h$]h%]h&]uhjh]rg h=X "."rh ri }rj (hUhjd ubahj9ubj)rk }rl (hUh }rm (jXp_attrrn h"]ro Xgrammar-token-p_attrrp ah#]h$]h%]h&]uhjh]rq h=X ("X" | "Y" | "S" | "A")rr rs }rt (hUhjk ubahj9ubj)ru }rv (hUh }rw (jXmodel_idrx h"]ry Xgrammar-token-model_idrz ah#]h$]h%]h&]uhjh]r{ h=X [Dataset "."] ("F"|"Z")r| r} }r~ (hUhju ubahj9ubj)r }r (hUh }r (jXfunc_idr h"]r Xgrammar-token-func_idr ah#]h$]h%]h&]uhjh]r h=X Funcname |r r }r (hUhj ubahj9ubj)r }r (hUh }r (jXh"]h#]h$]h%]h&]uhjh]r (h=X r }r (hX hj ubj)r }r (hXmodel_idh }r (UreftypejU reftargetXmodel_idU refdomainjh"]h#]h$]h%]h&]uhj h]r h{)r }r (hXmodel_idh }r (h$]h%]r jah#]h"]h&]uhj h]r h=Xmodel_idr r }r (hUhj ubahhubahjubh=X "[" Number "]"r r }r (hUhj ubehj9ubj)r }r (hUh }r (jX param_lhsr h"]r Xgrammar-token-param_lhsr ah#]h$]h%]h&]uhjh]r h=X Funcname "." Lname |r r }r (hUhj ubahj9ubj)r }r (hUh }r (jXh"]h#]h$]h%]h&]uhjh]r (h=X r }r (hX hj ubj)r }r (hXmodel_idh }r (UreftypejU reftargetXmodel_idU refdomainjh"]h#]h$]h%]h&]uhj h]r h{)r }r (hXmodel_idh }r (h$]h%]r jah#]h"]h&]uhj h]r h=Xmodel_idr r }r (hUhj ubahhubahjubh=X! "[" (Number | "*") "]" "." Lnamer r }r (hUhj ubehj9ubj)r }r (hUh }r (jXvar_idr h"]r Xgrammar-token-var_idr ah#]h$]h%]h&]uhjh]r h=X Varname |r r }r (hUhj ubahj9ubj)r }r (hUh }r (jXh"]h#]h$]h%]h&]uhjh]r (h=X r }r (hX hj ubj)r }r (hXfunc_idh }r (UreftypejU reftargetXfunc_idU refdomainjh"]h#]h$]h%]h&]uhj h]r h{)r }r (hXfunc_idh }r (h$]h%]r jah#]h"]h&]uhj h]r h=Xfunc_idr r }r (hUhj ubahhubahjubh=X "." Lnamer r }r (hUhj ubehj9ubj)r }r (hUh }r (jXranger h"]r Xgrammar-token-ranger ah#]h$]h%]h&]uhjh]r (h=X "[" [r r }r (hX "[" [hj ubj)r }r (hXexprh }r (UreftypejU reftargetXexprU refdomainjh"]h#]h$]h%]h&]uhj h]r h{)r }r (hXexprh }r (h$]h%]r jah#]h"]h&]uhj h]r h=Xexprr r }r (hUhj ubahhubahjubh=X] ":" [r r }r (hX] ":" [hj ubj)r }r (hXexprh }r (UreftypejU reftargetXexprU refdomainjh"]h#]h$]h%]h&]uhj h]r h{)r }r (hXexprh }r (h$]h%]r jah#]h"]h&]uhj h]r h=Xexprr r }r (hUhj ubahhubahjubh=X] "]"r r }r (hUhj ubehj9ubj)r }r (hUh }r (jXfilenamer h"]r Xgrammar-token-filenamer ah#]h$]h%]h&]uhjh]r h=X QuotedString | NonblankStringr r }r (hUhj ubahj9ubeubhA)r }r (hX**Mathematical expressions**r hjhhhhEh }r (h$]h%]h#]h"]h&]uh(Kh)hh]r jg)r }r (hj h }r (h$]h%]h#]h"]h&]uhj h]r h=XMathematical expressionsr r }r (hUhj ubahjoubaubj)r }r (hUhjhhhj h }r (h$]h%]h#]h"]h&]uh(Kh)hh]r (j)r }r (hUh }r (jXexprr! h"]r" Xgrammar-token-exprr# ah#]h$]h%]h&]uhj h]r$ h=X expr_or ? expr_or : expr_orr% r& }r' (hUhj ubahj9ubj)r( }r) (hUh }r* (jXexpr_orr+ h"]r, Xgrammar-token-expr_orr- ah#]h$]h%]h&]uhj h]r. h=X expr_and % "or"r/ r0 }r1 (hUhj( ubahj9ubj)r2 }r3 (hUh }r4 (jXexpr_andr5 h"]r6 Xgrammar-token-expr_andr7 ah#]h$]h%]h&]uhj h]r8 h=X expr_not % "and"r9 r: }r; (hUhj2 ubahj9ubj)r< }r= (hUh }r> (jXexpr_notr? h"]r@ Xgrammar-token-expr_notrA ah#]h$]h%]h&]uhj h]rB h=X "not" expr_not | comparisonrC rD }rE (hUhj< ubahj9ubj)rF }rG (hUh }rH (jX comparisonrI h"]rJ Xgrammar-token-comparisonrK ah#]h$]h%]h&]uhj h]rL h=X& arith % ("<"|">"|"=="|">="|"<="|"!=")rM rN }rO (hUhjF ubahj9ubj)rP }rQ (hUh }rR (jXarithrS h"]rT Xgrammar-token-arithrU ah#]h$]h%]h&]uhj h]rV h=X term % ("+"|"-")rW rX }rY (hUhjP ubahj9ubj)rZ }r[ (hUh }r\ (jXtermr] h"]r^ Xgrammar-token-termr_ ah#]h$]h%]h&]uhj h]r` h=X factor % ("*"|"/")ra rb }rc (hUhjZ ubahj9ubj)rd }re (hUh }rf (jXfactorrg h"]rh Xgrammar-token-factorri ah#]h$]h%]h&]uhj h]rj h=X ('+'|'-') factor | powerrk rl }rm (hUhjd ubahj9ubj)rn }ro (hUh }rp (jXpowerrq h"]rr Xgrammar-token-powerrs ah#]h$]h%]h&]uhj h]rt h=X atom ['**' factor]ru rv }rw (hUhjn ubahj9ubj)rx }ry (hUh }rz (jXatomr{ h"]r| Xgrammar-token-atomr} ah#]h$]h%]h&]uhj h]r~ h=X# Number | "true" | "false" | "pi" |r r }r (hUhjx ubahj9ubj)r }r (hUh }r (jXh"]h#]h$]h%]h&]uhj h]r h=X# math_func | braced_expr | ?others?r r }r (hUhj ubahj9ubj)r }r (hUh }r (jX math_funcr h"]r Xgrammar-token-math_funcr ah#]h$]h%]h&]uhj h]r h=X "sqrt" "(" expr ")" |r r }r (hUhj ubahj9ubj)r }r (hUh }r (jXh"]h#]h$]h%]h&]uhj h]r h=X "gamma" "(" expr ")" |r r }r (hUhj ubahj9ubj)r }r (hUh }r (jXh"]h#]h$]h%]h&]uhj h]r h=X ...r r }r (hUhj ubahj9ubj)r }r (hUh }r (jX braced_exprr h"]r Xgrammar-token-braced_exprr ah#]h$]h%]h&]uhj h]r (h=X "{" [Dataset+ ":"] r r }r (hX "{" [Dataset+ ":"] hj ubj)r }r (hXp_exprh }r (UreftypejU reftargetXp_exprU refdomainjh"]h#]h$]h%]h&]uhj h]r h{)r }r (hXp_exprh }r (h$]h%]r jah#]h"]h&]uhj h]r h=Xp_exprr r }r (hUhj ubahhubahjubh=X "}"r r }r (hUhj ubehj9ubeubhA)r }r (hXtThe ``atom`` rule also accepts some fityk expressions, such as $variable, %function.parameter, %function(expr), etc.hjhhhhEh }r (h$]h%]h#]h"]h&]uh(Kh)hh]r (h=XThe r r }r (hXThe hj ubh{)r }r (hX``atom``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xatomr r }r (hUhj ubahhubh=Xh rule also accepts some fityk expressions, such as $variable, %function.parameter, %function(expr), etc.r r }r (hXh rule also accepts some fityk expressions, such as $variable, %function.parameter, %function(expr), etc.hj ubeubhA)r }r (hXj``p_expr`` and ``v_expr`` are similar to ``expr``, but they use additional variables in the ``atom`` rule.hjhhhhEh }r (h$]h%]h#]h"]h&]uh(Kh)hh]r (h{)r }r (hX ``p_expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xp_exprr r }r (hUhj ubahhubh=X and r r }r (hX and hj ubh{)r }r (hX ``v_expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xv_exprr r }r (hUhj ubahhubh=X are similar to r r }r (hX are similar to hj ubh{)r }r (hX``expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xexprr r }r (hUhj ubahhubh=X+, but they use additional variables in the r r }r (hX+, but they use additional variables in the hj ubh{)r }r (hX``atom``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xatomr r }r (hUhj ubahhubh=X rule.r r }r (hX rule.hj ubeubhA)r }r (hX``p_expr`` recognizes ``n``, ``M``, ``x``, ``y``, ``s``, ``a``, ``X``, ``Y``, ``S`` and ``A``. All of them but ``n`` and ``M`` can be indexed (e.g. ``x[4]``). Example: ``(x+x[n-1])/2``.hjhhhhEh }r (h$]h%]h#]h"]h&]uh(Kh)hh]r (h{)r }r (hX ``p_expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xp_exprr r }r (hUhj ubahhubh=X recognizes r r }r (hX recognizes hj ubh{)r }r (hX``n``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xnr }r (hUhj ubahhubh=X, r r }r (hX, hj ubh{)r }r (hX``M``h }r (h$]h%]h#]h"]h&]uhj h]r h=XMr }r (hUhj ubahhubh=X, r r }r (hX, hj ubh{)r }r (hX``x``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xxr }r (hUhj ubahhubh=X, r r }r (hX, hj ubh{)r }r! (hX``y``h }r" (h$]h%]h#]h"]h&]uhj h]r# h=Xyr$ }r% (hUhj ubahhubh=X, r& r' }r( (hX, hj ubh{)r) }r* (hX``s``h }r+ (h$]h%]h#]h"]h&]uhj h]r, h=Xsr- }r. (hUhj) ubahhubh=X, r/ r0 }r1 (hX, hj ubh{)r2 }r3 (hX``a``h }r4 (h$]h%]h#]h"]h&]uhj h]r5 h=Xar6 }r7 (hUhj2 ubahhubh=X, r8 r9 }r: (hX, hj ubh{)r; }r< (hX``X``h }r= (h$]h%]h#]h"]h&]uhj h]r> h=XXr? }r@ (hUhj; ubahhubh=X, rA rB }rC (hX, hj ubh{)rD }rE (hX``Y``h }rF (h$]h%]h#]h"]h&]uhj h]rG h=XYrH }rI (hUhjD ubahhubh=X, rJ rK }rL (hX, hj ubh{)rM }rN (hX``S``h }rO (h$]h%]h#]h"]h&]uhj h]rP h=XSrQ }rR (hUhjM ubahhubh=X and rS rT }rU (hX and hj ubh{)rV }rW (hX``A``h }rX (h$]h%]h#]h"]h&]uhj h]rY h=XArZ }r[ (hUhjV ubahhubh=X. All of them but r\ r] }r^ (hX. All of them but hj ubh{)r_ }r` (hX``n``h }ra (h$]h%]h#]h"]h&]uhj h]rb h=Xnrc }rd (hUhj_ ubahhubh=X and re rf }rg (hX and hj ubh{)rh }ri (hX``M``h }rj (h$]h%]h#]h"]h&]uhj h]rk h=XMrl }rm (hUhjh ubahhubh=X can be indexed (e.g. rn ro }rp (hX can be indexed (e.g. hj ubh{)rq }rr (hX``x[4]``h }rs (h$]h%]h#]h"]h&]uhj h]rt h=Xx[4]ru rv }rw (hUhjq ubahhubh=X ). Example: rx ry }rz (hX ). Example: hj ubh{)r{ }r| (hX``(x+x[n-1])/2``h }r} (h$]h%]h#]h"]h&]uhj h]r~ h=X (x+x[n-1])/2r r }r (hUhj{ ubahhubh=X.r }r (hX.hj ubeubhA)r }r (hX``v_expr`` uses all unknown names (``Lname``) as variables. The tilde (``~``) can be used to create simple-variables. Only a subset of functions (``math_func``) from ``expr`` is supported. Examples: ``a+b*x^2``, ``~5``.hjhhhhEh }r (h$]h%]h#]h"]h&]uh(Mh)hh]r (h{)r }r (hX ``v_expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xv_exprr r }r (hUhj ubahhubh=X uses all unknown names (r r }r (hX uses all unknown names (hj ubh{)r }r (hX ``Lname``h }r (h$]h%]h#]h"]h&]uhj h]r h=XLnamer r }r (hUhj ubahhubh=X) as variables. The tilde (r r }r (hX) as variables. The tilde (hj ubh{)r }r (hX``~``h }r (h$]h%]h#]h"]h&]uhj h]r h=X~r }r (hUhj ubahhubh=XF) can be used to create simple-variables. Only a subset of functions (r r }r (hXF) can be used to create simple-variables. Only a subset of functions (hj ubh{)r }r (hX ``math_func``h }r (h$]h%]h#]h"]h&]uhj h]r h=X math_funcr r }r (hUhj ubahhubh=X) from r r }r (hX) from hj ubh{)r }r (hX``expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xexprr r }r (hUhj ubahhubh=X is supported. Examples: r r }r (hX is supported. Examples: hj ubh{)r }r (hX ``a+b*x^2``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xa+b*x^2r r }r (hUhj ubahhubh=X, r r }r (hX, hj ubh{)r }r (hX``~5``h }r (h$]h%]h#]h"]h&]uhj h]r h=X~5r r }r (hUhj ubahhubh=X.r }r (hX.hj ubeubhA)r }r (hXSince ``v_expr`` is used to define variables and user-defined functions, the program calculates symbolically derivatives of ``v_expr``. That is why not all the function from ``expr`` are supported (they may be added in the future).hjhhhhEh }r (h$]h%]h#]h"]h&]uh(Mh)hh]r (h=XSince r r }r (hXSince hj ubh{)r }r (hX ``v_expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xv_exprr r }r (hUhj ubahhubh=Xl is used to define variables and user-defined functions, the program calculates symbolically derivatives of r r }r (hXl is used to define variables and user-defined functions, the program calculates symbolically derivatives of hj ubh{)r }r (hX ``v_expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xv_exprr r }r (hUhj ubahhubh=X(. That is why not all the function from r r }r (hX(. That is why not all the function from hj ubh{)r }r (hX``expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=Xexprr r }r (hUhj ubahhubh=X1 are supported (they may be added in the future).r r }r (hX1 are supported (they may be added in the future).hj ubeubhA)r }r (hX``dataset_expr`` supports very limited set of operators and a few functions that take Dataset token as argument (example: ``@0 - shirley_bg(@0)``).hjhhhhEh }r (h$]h%]h#]h"]h&]uh(M h)hh]r (h{)r }r (hX``dataset_expr``h }r (h$]h%]h#]h"]h&]uhj h]r h=X dataset_exprr r }r (hUhj ubahhubh=Xj supports very limited set of operators and a few functions that take Dataset token as argument (example: r r }r (hXj supports very limited set of operators and a few functions that take Dataset token as argument (example: hj ubh{)r }r (hX``@0 - shirley_bg(@0)``h }r (h$]h%]h#]h"]h&]uhj h]r h=X@0 - shirley_bg(@0)r r }r (hUhj ubahhubh=X).r r }r (hX).hj ubeubhA)r }r (hX **Lexer**r hjhhhhEh }r (h$]h%]h#]h"]h&]uh(M h)hh]r jg)r }r (hj h }r (h$]h%]h#]h"]h&]uhj h]r h=XLexerr r }r (hUhj ubahjoubaubhA)r }r (hXBBelow, some of the tokens produced by the fityk lexer are defined.r hjhhhhEh }r (h$]h%]h#]h"]h&]uh(Mh)hh]r h=XBBelow, some of the tokens produced by the fityk lexer are defined.r r }r (hj hj ubaubhA)r }r (hX~The lexer is context-dependend: ``NonblankString`` and ``RestOfLine`` are produced only when they are expected in the grammar.hjhhhhEh }r (h$]h%]h#]h"]h&]uh(Mh)hh]r (h=X The lexer is context-dependend: r! r" }r# (hX The lexer is context-dependend: hj ubh{)r$ }r% (hX``NonblankString``h }r& (h$]h%]h#]h"]h&]uhj h]r' h=XNonblankStringr( r) }r* (hUhj$ ubahhubh=X and r+ r, }r- (hX and hj ubh{)r. }r/ (hX``RestOfLine``h }r0 (h$]h%]h#]h"]h&]uhj h]r1 h=X RestOfLiner2 r3 }r4 (hUhj. ubahhubh=X9 are produced only when they are expected in the grammar.r5 r6 }r7 (hX9 are produced only when they are expected in the grammar.hj ubeubhA)r8 }r9 (hXU``Uname`` is used only for function types (Gaussian) and pseudo-parameters (%f.Area).hjhhhhEh }r: (h$]h%]h#]h"]h&]uh(Mh)hh]r; (h{)r< }r= (hX ``Uname``h }r> (h$]h%]h#]h"]h&]uhj8 h]r? h=XUnamer@ rA }rB (hUhj< ubahhubh=XL is used only for function types (Gaussian) and pseudo-parameters (%f.Area).rC rD }rE (hXL is used only for function types (Gaussian) and pseudo-parameters (%f.Area).hj8 ubeubj)rF }rG (hUhjhhhj h }rH (h$]h%]h#]h"]h&]uh(M!h)hh]rI (j)rJ }rK (hUh }rL (jXDatasetrM h"]rN Xgrammar-token-DatasetrO ah#]h$]h%]h&]uhjF h]rP h=X "@"(Digit+|"+"|"*")rQ rR }rS (hUhjJ ubahj9ubj)rT }rU (hUh }rV (jXVarnamerW h"]rX Xgrammar-token-VarnamerY ah#]h$]h%]h&]uhjF h]rZ h=X "$" Lnamer[ r\ }r] (hUhjT ubahj9ubj)r^ }r_ (hUh }r` (jXFuncnamera h"]rb Xgrammar-token-Funcnamerc ah#]h$]h%]h&]uhjF h]rd h=X "%" Lnamere rf }rg (hUhj^ ubahj9ubj)rh }ri (hUh }rj (jX QuotedStringrk h"]rl Xgrammar-token-QuotedStringrm ah#]h$]h%]h&]uhjF h]rn h=X "'" (AllChars - "'")* "'"ro rp }rq (hUhjh ubahj9ubj)rr }rs (hUh }rt (jXLnameru h"]rv Xgrammar-token-Lnamerw ah#]h$]h%]h&]uhjF h]rx h=X- (LowerCase | "_") (LowerCase | Digit | "_")*ry rz }r{ (hUhjr ubahj9ubj)r| }r} (hUh }r~ (jXUnamer h"]r Xgrammar-token-Unamer ah#]h$]h%]h&]uhjF h]r h=X UpperCase AlphaNum+r r }r (hUhj| ubahj9ubj)r }r (hUh }r (jXNumberr h"]r Xgrammar-token-Numberr ah#]h$]h%]h&]uhjF h]r h=X ?number read by strtod()?r r }r (hUhj ubahj9ubj)r }r (hUh }r (jXNonblankStringr h"]r Xgrammar-token-NonblankStringr ah#]h$]h%]h&]uhjF h]r h=X( (AllChars - (WhiteSpace | ";" | "#" ))*r r }r (hUhj ubahj9ubj)r }r (hUh }r (jX RestOfLiner h"]r Xgrammar-token-RestOfLiner ah#]h$]h%]h&]uhjF h]r h=X AllChars*r r }r (hUhj ubahj9ubeubeubeubehUU transformerr NU footnote_refsr }r Urefnamesr }r Usymbol_footnotesr ]r Uautofootnote_refsr ]r Usymbol_footnote_refsr ]r U citationsr ]r h)hU current_liner NUtransform_messagesr ]r cdocutils.nodes system_message r )r }r (hUh }r (h$]UlevelKh"]h#]Usourcehh%]h&]UlineKUtypeUINFOr uh]r hA)r }r (hUh }r (h$]h%]h#]h"]h&]uhj h]r h=X*Hyperlink target "lang" is not referenced.r r }r (hUhj ubahhEubahUsystem_messager ubaUreporterr NUid_startr KU autofootnotesr ]r U citation_refsr }r Uindirect_targetsr ]r Usettingsr (cdocutils.frontend Values r or }r (Ufootnote_backlinksr KUrecord_dependenciesr NU rfc_base_urlr Uhttps://tools.ietf.org/html/r U tracebackr Upep_referencesr NUstrip_commentsr NU toc_backlinksr Uentryr U language_coder Uenr U datestampr NU report_levelr KU _destinationr NU halt_levelr KU strip_classesr Nh:NUerror_encoding_error_handlerr Ubackslashreplacer Udebugr NUembed_stylesheetr Uoutput_encoding_error_handlerr Ustrictr U sectnum_xformr KUdump_transformsr NU docinfo_xformr KUwarning_streamr NUpep_file_url_templater Upep-%04dr Uexit_status_levelr KUconfigr NUstrict_visitorr NUcloak_email_addressesr Utrim_footnote_reference_spacer Uenvr NUdump_pseudo_xmlr NUexpose_internalsr NUsectsubtitle_xformr U source_linkr NUrfc_referencesr NUoutput_encodingr Uutf-8r U source_urlr NUinput_encodingr Uutf-8r U_disable_configr NU id_prefixr UU tab_widthr KUerror_encodingr Uasciir U_sourcer hUgettext_compactr U generatorr NUdump_internalsr NU smart_quotesr U pep_base_urlr U https://www.python.org/dev/peps/r Usyntax_highlightr Ulongr Uinput_encoding_error_handlerr j Uauto_id_prefixr Uidr Udoctitle_xformr Ustrip_elements_with_classesr NU _config_filesr ]Ufile_insertion_enabledr U raw_enabledr KU dump_settingsr NubUsymbol_footnote_startr KUidsr }r (hh+jjjjjO jJ j j jU jP j j jY jT jm jh j- j( jjjjjjjc j^ j j jw jr jz ju j j j7 j2 j j jp jk jjj^jYjQ jL j j j" j js jn jgjbjjj j jjj} jx j j j_ jZ j-j(j j jA j< hh+j j| hjjjjjjj{jTjOj?j:jj{jK jF ji jd j# j j j uUsubstitution_namesr }r hh)h }r (h$]h"]h#]Usourcehh%]h&]uU footnotesr ]r Urefidsr }r h]r hasub.PKFk"fityk-v1.2.1/.doctrees/ref.doctreecdocutils.nodes document q)q}q(U nametypesq}q(XautoplotqXinfoqX hello.luaqXsettingsq Xepsilonq Xother commandsq NXstarting fityk and cfitykq NXinvokingq Xfityk.hqXdebugqNXinformation displayqNXscriptsqNXprintqNX class fitykqXnumeric_formatqXrefqX data viewqNX all the restqNuUsubstitution_defsq}qUparse_messagesq]q(cdocutils.nodes system_message q)q}q(U rawsourceqUUparentq cdocutils.nodes section q!)q"}q#(hUU referencedq$Kh h!)q%}q&(hUh hUsourceq'X9/var/build/user_builds/fityk/checkouts/v1.2.1/doc/ref.rstq(Uexpect_referenced_by_nameq)}q*hcdocutils.nodes target q+)q,}q-(hX.. _ref:h hh'h(Utagnameq.Utargetq/U attributesq0}q1(Uidsq2]Ubackrefsq3]Udupnamesq4]Uclassesq5]Unamesq6]Urefidq7Urefq8uUlineq9KUdocumentq:hUchildrenq;]ubsh.Usectionq(U all-the-restq?h8eh6]q@(hheuh9Kh:hUexpect_referenced_by_idqA}qBh8h,sh;]qC(cdocutils.nodes title qD)qE}qF(hX All the RestqGh h%h'h(h.UtitleqHh0}qI(h4]h5]h3]h2]h6]uh9Kh:hh;]qJcdocutils.nodes Text qKX All the RestqLqM}qN(hhGh hEubaubh+)qO}qP(hX .. _settings:h h%h'h(h.h/h0}qQ(h2]h3]h4]h5]h6]h7UsettingsqRuh9Kh:hh;]ubh!)qS}qT(hUh h%h'h(h)}qUh hOsh.hThe file can be either a fityk script (usually with extension q}q~}q(hX>The file can be either a fityk script (usually with extension h hyubcdocutils.nodes literal q)q}q(hX``fit``h0}q(h4]h5]h3]h2]h6]uh hyh;]qhKXfitqq}q(hUh hubah.UliteralqubhKX), or a Lua script (extension qq}q(hX), or a Lua script (extension h hyubh)q}q(hX``lua``h0}q(h4]h5]h3]h2]h6]uh hyh;]qhKXluaqq}q(hUh hubah.hubhKX).qq}q(hX).h hyubeubcdocutils.nodes note q)q}q(hXFityk can save its state to a script (``info state > file.fit``). It can also save all commands executed (directly or via GUI) in the session to a script (``info history > file.fit``).h hSh'h(h.Unoteqh0}q(h4]h5]h3]h2]h6]uh9Nh:hh;]qhd)q}q(hXFityk can save its state to a script (``info state > file.fit``). It can also save all commands executed (directly or via GUI) in the session to a script (``info history > file.fit``).h hh'h(h.hhh0}q(h4]h5]h3]h2]h6]uh9Kh;]q(hKX&Fityk can save its state to a script (qq}q(hX&Fityk can save its state to a script (h hubh)q}q(hX``info state > file.fit``h0}q(h4]h5]h3]h2]h6]uh hh;]qhKXinfo state > file.fitqq}q(hUh hubah.hubhKX\). It can also save all commands executed (directly or via GUI) in the session to a script (qq}q(hX\). It can also save all commands executed (directly or via GUI) in the session to a script (h hubh)q}q(hX``info history > file.fit``h0}q(h4]h5]h3]h2]h6]uh hh;]qhKXinfo history > file.fitqq}q(hUh hubah.hubhKX).qq}q(hX).h hubeubaubhd)q}q(hXSince a Fityk script with all the data inside can be a large file, the files may be stored compressed and it is possible to directly read gzip-compressed fityk script (``.fit.gz``).h hSh'h(h.hhh0}q(h4]h5]h3]h2]h6]uh9Kh:hh;]q(hKXSince a Fityk script with all the data inside can be a large file, the files may be stored compressed and it is possible to directly read gzip-compressed fityk script (qq}q(hXSince a Fityk script with all the data inside can be a large file, the files may be stored compressed and it is possible to directly read gzip-compressed fityk script (h hubh)q}q(hX ``.fit.gz``h0}q(h4]h5]h3]h2]h6]uh hh;]qhKX.fit.gzq…q}q(hUh hubah.hubhKX).qŅq}q(hX).h hubeubhd)q}q(hXiEmbedded Lua interpreter can execute any program in Lua 5.1. One-liners can be run with command ``lua``::h hSh'h(h.hhh0}q(h4]h5]h3]h2]h6]uh9Kh:hh;]q(hKX`Embedded Lua interpreter can execute any program in Lua 5.1. One-liners can be run with command q̅q}q(hX`Embedded Lua interpreter can execute any program in Lua 5.1. One-liners can be run with command h hubh)q}q(hX``lua``h0}q(h4]h5]h3]h2]h6]uh hh;]qhKXluaqӅq}q(hUh hubah.hubhKX:q}q(hX:h hubeubhn)q}q(hX=-> lua print(_VERSION) Lua 5.1 =-> lua print(os.date("Today is %A.")) Today is Thursday. =-> lua for n,f in F:all_functions() do print(n, f, f:get_template_name()) end 0 %_1 Constant 1 %_2 Cycleh hSh'h(h.hqh0}q(hshth2]h3]h4]h5]h6]uh9Kh:hh;]qhKX=-> lua print(_VERSION) Lua 5.1 =-> lua print(os.date("Today is %A.")) Today is Thursday. =-> lua for n,f in F:all_functions() do print(n, f, f:get_template_name()) end 0 %_1 Constant 1 %_2 Cycleq܅q}q(hUh hubaubhd)q}q(hXr(The Lua ``print`` function in fityk is redefined to show the output in the GUI instead of writing to ``stdout``).h hSh'h(h.hhh0}q(h4]h5]h3]h2]h6]uh9K'h:hh;]q(hKX (The Lua qㅁq}q(hX (The Lua h hubh)q}q(hX ``print``h0}q(h4]h5]h3]h2]h6]uh hh;]qhKXprintqꅁq}q(hUh hubah.hubhKXT function in fityk is redefined to show the output in the GUI instead of writing to q텁q}q(hXT function in fityk is redefined to show the output in the GUI instead of writing to h hubh)q}q(hX ``stdout``h0}q(h4]h5]h3]h2]h6]uh hh;]qhKXstdoutqq}q(hUh hubah.hubhKX).qq}q(hX).h hubeubhd)q}q(hX]Like in the Lua interpreter, ``=`` at the beginning of line can be used to save some typing::h hSh'h(h.hhh0}q(h4]h5]h3]h2]h6]uh9K*h:hh;]q(hKXLike in the Lua interpreter, qq}r(hXLike in the Lua interpreter, h hubh)r}r(hX``=``h0}r(h4]h5]h3]h2]h6]uh hh;]rhKX=r}r(hUh jubah.hubhKX: at the beginning of line can be used to save some typing:rr}r (hX: at the beginning of line can be used to save some typing:h hubeubhn)r }r (hX0=-> = os.date("Today is %A.") Today is Thursday.h hSh'h(h.hqh0}r (hshth2]h3]h4]h5]h6]uh9K-h:hh;]r hKX0=-> = os.date("Today is %A.") Today is Thursday.rr}r(hUh j ubaubhd)r}r(hXSimilarly, ``=`` after ``execute`` also interprets the rest of line as Lua expressions, but this time the results are not printed, they are executed as fityk commands::h hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9K0h:hh;]r(hKX Similarly, rr}r(hX Similarly, h jubh)r}r(hX``=``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX=r}r(hUh jubah.hubhKX after rr}r (hX after h jubh)r!}r"(hX ``execute``h0}r#(h4]h5]h3]h2]h6]uh jh;]r$hKXexecuter%r&}r'(hUh j!ubah.hubhKX also interprets the rest of line as Lua expressions, but this time the results are not printed, they are executed as fityk commands:r(r)}r*(hX also interprets the rest of line as Lua expressions, but this time the results are not printed, they are executed as fityk commands:h jubeubhn)r+}r,(hX=-> = string.format("fit %d", math.random(10,20)) fit 17 =-> exec= string.format("fit %d", math.random(10,20)) (runs from 10 to 20 iterations of fitting)h hSh'h(h.hqh0}r-(hshth2]h3]h4]h5]h6]uh9K4h:hh;]r.hKX=-> = string.format("fit %d", math.random(10,20)) fit 17 =-> exec= string.format("fit %d", math.random(10,20)) (runs from 10 to 20 iterations of fitting)r/r0}r1(hUh j+ubaubhd)r2}r3(hXiThe Lua interpreter in Fityk has defined global object ``F`` which enables interaction with the program::h hSh'h(h.hhh0}r4(h4]h5]h3]h2]h6]uh9K9h:hh;]r5(hKX7The Lua interpreter in Fityk has defined global object r6r7}r8(hX7The Lua interpreter in Fityk has defined global object h j2ubh)r9}r:(hX``F``h0}r;(h4]h5]h3]h2]h6]uh j2h;]r<hKXFr=}r>(hUh j9ubah.hubhKX, which enables interaction with the program:r?r@}rA(hX, which enables interaction with the program:h j2ubeubhn)rB}rC(hX=-> = F:get_info("version")h hSh'h(h.hqh0}rD(hshth2]h3]h4]h5]h6]uh9K = F:get_info("version")rFrG}rH(hUh jBubaubhd)rI}rJ(hXNow the first example that can be useful. For each dataset write output of the ``info peaks`` command to a file named after the data file, with appended ".out"::h hSh'h(h.hhh0}rK(h4]h5]h3]h2]h6]uh9K>h:hh;]rL(hKXONow the first example that can be useful. For each dataset write output of the rMrN}rO(hXONow the first example that can be useful. For each dataset write output of the h jIubh)rP}rQ(hX``info peaks``h0}rR(h4]h5]h3]h2]h6]uh jIh;]rShKX info peaksrTrU}rV(hUh jPubah.hubhKXC command to a file named after the data file, with appended ".out":rWrX}rY(hXC command to a file named after the data file, with appended ".out":h jIubeubhn)rZ}r[(hX>=-> @*: exec= "info peaks >'"..F:get_info("filename")..".out'"h hSh'h(h.hqh0}r\(hshth2]h3]h4]h5]h6]uh9KBh:hh;]r]hKX>=-> @*: exec= "info peaks >'"..F:get_info("filename")..".out'"r^r_}r`(hUh jZubaubhd)ra}rb(hXs``F`` is an instance of `class Fityk`_ in Lua wrapper. For now, the only documentation is in the `fityk.h`_ header.h hSh'h(h.hhh0}rc(h4]h5]h3]h2]h6]uh9KDh:hh;]rd(h)re}rf(hX``F``h0}rg(h4]h5]h3]h2]h6]uh jah;]rhhKXFri}rj(hUh jeubah.hubhKX is an instance of rkrl}rm(hX is an instance of h jaubcdocutils.nodes reference rn)ro}rp(hX`class Fityk`_UresolvedrqKh jah.U referencerrh0}rs(UnameX class FitykUrefurirtX;https://github.com/wojdyr/fityk/blob/master/src/fityk.h#L80ruh2]h3]h4]h5]h6]uh;]rvhKX class Fitykrwrx}ry(hUh joubaubhKX; in Lua wrapper. For now, the only documentation is in the rzr{}r|(hX; in Lua wrapper. For now, the only documentation is in the h jaubjn)r}}r~(hX `fityk.h`_jqKh jah.jrh0}r(UnameXfityk.hrjtX7https://github.com/wojdyr/fityk/blob/master/src/fityk.hrh2]h3]h4]h5]h6]uh;]rhKXfityk.hrr}r(hUh j}ubaubhKX header.rr}r(hX header.h jaubeubh+)r}r(hXL.. _class Fityk: https://github.com/wojdyr/fityk/blob/master/src/fityk.h#L80h$Kh hSh'h(h.h/h0}r(jtjuh2]rU class-fitykrah3]h4]h5]h6]rhauh9KGh:hh;]ubh+)r}r(hXD.. _fityk.h: https://github.com/wojdyr/fityk/blob/master/src/fityk.hh$Kh hSh'h(h.h/h0}r(jtjh2]rUfityk-hrah3]h4]h5]h6]rhauh9KHh:hh;]ubhd)r}r(hX.Here is an example of Lua-Fityk interactions::rh hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9KJh:hh;]rhKX-Here is an example of Lua-Fityk interactions:rr}r(hX-Here is an example of Lua-Fityk interactions:h jubaubhn)r}r(hX-- load data from files file01.dat, file02.dat, ... file13.dat for i=1,13 do filename = string.format("file%02d.dat", i) F:execute("@+ < '" .. filename .. ":0:1::'") end -- print some statistics about loaded data n = F:get_dataset_count() print(n .. " datasets loaded.") total_max_y = 0 for i=0,n-1 do max_y = F:calculate_expr("max(y)", i) if max_y > total_max_y then total_max_y = max_y end end print("The largest y: " .. total_max_y)h hSh'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9KLh:hh;]rhKX-- load data from files file01.dat, file02.dat, ... file13.dat for i=1,13 do filename = string.format("file%02d.dat", i) F:execute("@+ < '" .. filename .. ":0:1::'") end -- print some statistics about loaded data n = F:get_dataset_count() print(n .. " datasets loaded.") total_max_y = 0 for i=0,n-1 do max_y = F:calculate_expr("max(y)", i) if max_y > total_max_y then total_max_y = max_y end end print("The largest y: " .. total_max_y)rr}r(hUh jubaubhd)r}r(hXlIf a fityk command executed from Lua script fails, the whole script is stopped, unless you catch the error::h hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9K_h:hh;]rhKXkIf a fityk command executed from Lua script fails, the whole script is stopped, unless you catch the error:rr}r(hXkIf a fityk command executed from Lua script fails, the whole script is stopped, unless you catch the error:h jubaubhn)r}r(hX-- wrap F:execute() in pcall to handle possible errors status, err = pcall(function() F:execute("fit") end) if status == false then print("Error: " .. err) endh hSh'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9Kbh:hh;]rhKX-- wrap F:execute() in pcall to handle possible errors status, err = pcall(function() F:execute("fit") end) if status == false then print("Error: " .. err) endrr}r(hUh jubaubhd)r}r(hXHere is another example::rh hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Khh:hh;]rhKXHere is another example:rr}r(hXHere is another example:h jubaubhn)r}r(hX-- file foo.lua prev_x = nil for n = 0, F:get_dataset_count()-1 do local path = F:get_info("filename", n) local filename = string.match(path, "[^/\\]+$") or "" -- local x = F:calculate_expr("argmax(y)", n) local x = F:calculate_expr("F[0].center", n) s = string.format("%s: max at x=%.4f", filename, x) if prev_x ~= nil then s = s .. string.format(" (%+.4f)", x-prev_x) end prev_x = x print(s) endh hSh'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9Kjh:hh;]rhKX-- file foo.lua prev_x = nil for n = 0, F:get_dataset_count()-1 do local path = F:get_info("filename", n) local filename = string.match(path, "[^/\\]+$") or "" -- local x = F:calculate_expr("argmax(y)", n) local x = F:calculate_expr("F[0].center", n) s = string.format("%s: max at x=%.4f", filename, x) if prev_x ~= nil then s = s .. string.format(" (%+.4f)", x-prev_x) end prev_x = x print(s) endrr}r(hUh jubaubcsphinx.addnodes highlightlang r)r}r(hUh hSh'h(h.U highlightlangrh0}r(UlangXfitykUlinenothresholdI9223372036854775807 h2]h3]h4]h5]h6]uh9Kzh:hh;]ubhd)r}r(hXand its output::rh hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9K{h:hh;]rhKXand its output:rr}r(hXand its output:h jubaubhn)r}r(hX=-> exec foo.lua frame-000.dat: max at x=-0.0197 frame-001.dat: max at x=-0.0209 (-0.0012) frame-002.dat: max at x=-0.0216 (-0.0007) frame-003.dat: max at x=-0.0224 (-0.0008)h hSh'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9K}h:hh;]rhKX=-> exec foo.lua frame-000.dat: max at x=-0.0197 frame-001.dat: max at x=-0.0209 (-0.0012) frame-002.dat: max at x=-0.0216 (-0.0007) frame-003.dat: max at x=-0.0224 (-0.0008)rr}r(hUh jubaubhd)r}r(hXFYou may also see the `hello.lua`_ sample distributed with the program.h hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Kh:hh;]r(hKXYou may also see the rr}r(hXYou may also see the h jubjn)r}r(hX `hello.lua`_jqKh jh.jrh0}r(UnameX hello.luarjtX=https://github.com/wojdyr/fityk/blob/master/samples/hello.luarh2]h3]h4]h5]h6]uh;]rhKX hello.luarr}r(hUh jubaubhKX% sample distributed with the program.rr}r(hX% sample distributed with the program.h jubeubh+)r}r(hXL.. _hello.lua: https://github.com/wojdyr/fityk/blob/master/samples/hello.luah$Kh hSh'h(h.h/h0}r(jtjh2]rU hello-luarah3]h4]h5]h6]rhauh9Kh:hh;]ubhd)r}r(hXbThe Lua interpreter was added in ver. 1.0.3. If you have any questions about it, feel free to ask.rh hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Kh:hh;]rhKXbThe Lua interpreter was added in ver. 1.0.3. If you have any questions about it, feel free to ask.rr}r(hjh jubaubhd)r}r(hX)If you do prefer another programming language, Fityk library has C and C++ API, and comes with SWIG-based bindings for Python, Ruby, Perl and Java. Bindings to other languages supported by SWIG can be easily generated. The advantage of Lua is that it can interact with running fityk (GUI) program.rh hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Kh:hh;]rhKX)If you do prefer another programming language, Fityk library has C and C++ API, and comes with SWIG-based bindings for Python, Ruby, Perl and Java. Bindings to other languages supported by SWIG can be easily generated. The advantage of Lua is that it can interact with running fityk (GUI) program.rr}r(hjh jubaubhd)r}r(hXIt is also possible to automate Fityk by preparing a stand-alone program that writes a valid fityk script to the standard output. To read and execute the output of such program use command::h hSh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Kh:hh;]rhKXIt is also possible to automate Fityk by preparing a stand-alone program that writes a valid fityk script to the standard output. To read and execute the output of such program use command:rr}r(hXIt is also possible to automate Fityk by preparing a stand-alone program that writes a valid fityk script to the standard output. To read and execute the output of such program use command:h jubaubhn)r}r(hXexec ! program [args...]h hSh'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9Kh:hh;]rhKXexec ! program [args...]r r }r (hUh jubaubeubh"h!)r }r (hUh h%h'h(h.h}r?(hUh j9ubah.Uemphasisr@ubhKX and rArB}rC(hX and h j4ubj8)rD}rE(hX*yrange*h0}rF(h4]h5]h3]h2]h6]uh j4h;]rGhKXyrangerHrI}rJ(hUh jDubah.j@ubhKX has syntax rKrL}rM(hX has syntax h j4ubh)rN}rO(hX ``[min:max]``h0}rP(h4]h5]h3]h2]h6]uh j4h;]rQhKX [min:max]rRrS}rT(hUh jNubah.hubhKX\. If the boundaries are skipped, they are automatically determined using the given datasets.rUrV}rW(hX\. If the boundaries are skipped, they are automatically determined using the given datasets.h j4ubeubcdocutils.nodes admonition rX)rY}rZ(hX9there is hardly ever a need to use this command directly.r[h j h'h(h.U admonitionr\h0}r](h4]h5]r^Uadmonition-in-the-guir_ah3]h2]h6]uh9Nh:hh;]r`(hD)ra}rb(hX In the GUIrch jYh'h(h.hHh0}rd(h4]h5]h3]h2]h6]uh9Mh;]rehKX In the GUIrfrg}rh(hjch jaubaubhd)ri}rj(hj[h jYh'h(h.hhh0}rk(h4]h5]h3]h2]h6]uh9M h;]rlhKX9there is hardly ever a need to use this command directly.rmrn}ro(hj[h jiubaubeubhd)rp}rq(hXThe CLI version on Unix systems visualizes the data using the ``gnuplot`` program, which has similar syntax for the plot range.h j h'h(h.hhh0}rr(h4]h5]h3]h2]h6]uh9M"h:hh;]rs(hKX>The CLI version on Unix systems visualizes the data using the rtru}rv(hX>The CLI version on Unix systems visualizes the data using the h jpubh)rw}rx(hX ``gnuplot``h0}ry(h4]h5]h3]h2]h6]uh jph;]rzhKXgnuplotr{r|}r}(hUh jwubah.hubhKX6 program, which has similar syntax for the plot range.r~r}r(hX6 program, which has similar syntax for the plot range.h jpubeubhd)r}r(hX Examples::rh j h'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9M%h:hh;]rhKX Examples:rr}r(hX Examples:h jubaubhn)r}r(hXplot [20.4:50] [10:20] # show x from 20.4 to 50 and y from 10 to 20 plot [20.4:] # x from 20.4 to the end, # y range will be adjusted to encompass all data plot # all data will be shownh j h'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9M'h:hh;]rhKXplot [20.4:50] [10:20] # show x from 20.4 to 50 and y from 10 to 20 plot [20.4:] # x from 20.4 to the end, # y range will be adjusted to encompass all data plot # all data will be shownrr}r(hUh jubaubh+)r}r(hX .. _autoplot:h j h'h(h.h/h0}r(h2]h3]h4]h5]h6]h7Uautoplotruh9M,h:hh;]ubhd)r}r(hXeThe values of the options :option:`autoplot` and :option:`fit_replot` change the automatic plotting behaviour. By default, the plot is refreshed automatically after changing the data or the model (``autoplot=1``). It is also possible to replot the model when fitting, to show the progress (see the options :option:`fit_replot` and :option:`refresh_period`).h j h'h(h)}rhjsh.hhh0}r(h4]h5]h3]h2]rjah6]rhauh9M.h:hhA}rjjsh;]r(hKXThe values of the options rr}r(hXThe values of the options h jubcsphinx.addnodes pending_xref r)r}r(hX:option:`autoplot`rh jh'h(h.U pending_xrefrh0}r(UreftypeXoptionUrefwarnrU reftargetrXautoplotU refdomainXstdrh2]h3]U refexplicith4]h5]h6]UrefdocrXrefrU std:programrNuh9M.h;]rh)r}r(hjh0}r(h4]h5]r(UxrefrjX std-optionreh3]h2]h6]uh jh;]rhKXautoplotrr}r(hUh jubah.hubaubhKX and rr}r(hX and h jubj)r}r(hX:option:`fit_replot`rh jh'h(h.jh0}r(UreftypeXoptionjjX fit_replotU refdomainXstdrh2]h3]U refexplicith4]h5]h6]jjjNuh9M.h;]rh)r}r(hjh0}r(h4]h5]r(jjX std-optionreh3]h2]h6]uh jh;]rhKX fit_replotrr}r(hUh jubah.hubaubhKX change the automatic plotting behaviour. By default, the plot is refreshed automatically after changing the data or the model (rr}r(hX change the automatic plotting behaviour. By default, the plot is refreshed automatically after changing the data or the model (h jubh)r}r(hX``autoplot=1``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX autoplot=1rr}r(hUh jubah.hubhKX_). It is also possible to replot the model when fitting, to show the progress (see the options rr}r(hX_). It is also possible to replot the model when fitting, to show the progress (see the options h jubj)r}r(hX:option:`fit_replot`rh jh'h(h.jh0}r(UreftypeXoptionjjX fit_replotU refdomainXstdrh2]h3]U refexplicith4]h5]h6]jjjNuh9M.h;]rh)r}r(hjh0}r(h4]h5]r(jjX std-optionreh3]h2]h6]uh jh;]rhKX fit_replotrr}r(hUh jubah.hubaubhKX and rr}r(hX and h jubj)r}r(hX:option:`refresh_period`rh jh'h(h.jh0}r(UreftypeXoptionjjXrefresh_periodU refdomainXstdrh2]h3]U refexplicith4]h5]h6]jjjNuh9M.h;]rh)r}r(hjh0}r(h4]h5]r(jjX std-optionreh3]h2]h6]uh jh;]rhKXrefresh_periodrr}r(hUh jubah.hubaubhKX).rr}r(hX).h jubeubh+)r}r(hX .. _info:h j h'h(h.h/h0}r(h2]h3]h4]h5]h6]h7Uinforuh9M4h:hh;]ubeubh!)r}r(hUh h%h'h(h)}rhjsh.hh:hh;]r5(cdocutils.nodes list_item r6)r7}r8(hX1``info`` -- used to show preformatted informationr9h j0h'h(h.U list_itemr:h0}r;(h4]h5]h3]h2]h6]uh9Nh:hh;]r<hd)r=}r>(hj9h j7h'h(h.hhh0}r?(h4]h5]h3]h2]h6]uh9M>h;]r@(h)rA}rB(hX``info``h0}rC(h4]h5]h3]h2]h6]uh j=h;]rDhKXinforErF}rG(hUh jAubah.hubhKX) -- used to show preformatted informationrHrI}rJ(hX) -- used to show preformatted informationh j=ubeubaubj6)rK}rL(hX>``print`` -- mainly used to output numbers (expression values)rMh j0h'h(h.j:h0}rN(h4]h5]h3]h2]h6]uh9Nh:hh;]rOhd)rP}rQ(hjMh jKh'h(h.hhh0}rR(h4]h5]h3]h2]h6]uh9M?h;]rS(h)rT}rU(hX ``print``h0}rV(h4]h5]h3]h2]h6]uh jPh;]rWhKXprintrXrY}rZ(hUh jTubah.hubhKX5 -- mainly used to output numbers (expression values)r[r\}r](hX5 -- mainly used to output numbers (expression values)h jPubeubaubj6)r^}r_(hX1``debug`` -- used for testing the program itself h j0h'h(h.j:h0}r`(h4]h5]h3]h2]h6]uh9Nh:hh;]rahd)rb}rc(hX0``debug`` -- used for testing the program itselfh j^h'h(h.hhh0}rd(h4]h5]h3]h2]h6]uh9M@h;]re(h)rf}rg(hX ``debug``h0}rh(h4]h5]h3]h2]h6]uh jbh;]rihKXdebugrjrk}rl(hUh jfubah.hubhKX' -- used for testing the program itselfrmrn}ro(hX' -- used for testing the program itselfh jbubeubaubeubhd)rp}rq(hXBThe output of ``info`` and ``print`` can be redirected to a file::rrh jh'h(h.hhh0}rs(h4]h5]h3]h2]h6]uh9MBh:hh;]rt(hKXThe output of rurv}rw(hXThe output of h jpubh)rx}ry(hX``info``h0}rz(h4]h5]h3]h2]h6]uh jph;]r{hKXinfor|r}}r~(hUh jxubah.hubhKX and rr}r(hX and h jpubh)r}r(hX ``print``h0}r(h4]h5]h3]h2]h6]uh jph;]rhKXprintrr}r(hUh jubah.hubhKX can be redirected to a file:rr}r(hX can be redirected to a file:h jpubeubhn)r}r(hXinfo args > filename # truncate the file info args >> filename # append to the file info args > 'filename' # the filename can (and sometimes must) be in quotesh jh'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9MDh:hh;]rhKXinfo args > filename # truncate the file info args >> filename # append to the file info args > 'filename' # the filename can (and sometimes must) be in quotesrr}r(hUh jubaubhd)r}r(hXLThe redirection can create a file, so there is also a command to delete it::rh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9MHh:hh;]rhKXKThe redirection can create a file, so there is also a command to delete it:rr}r(hXKThe redirection can create a file, so there is also a command to delete it:h jubaubhn)r}r(hXdelete file filenameh jh'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9MJh:hh;]rhKXdelete file filenamerr}r(hUh jubaubh!)r}r(hUh$Kh jh'h(h.hr?}r@(hUh j:ubah.hubhKX+ -- options used when compiling the programrArB}rC(hX+ -- options used when compiling the programh j6ubeubaubj6)rD}rE(hXG``confidence level @n`` -- confidence limits for given confidence levelrFh jh'h(h.j:h0}rG(h4]h5]h3]h2]h6]uh9Nh:hh;]rHhd)rI}rJ(hjFh jDh'h(h.hhh0}rK(h4]h5]h3]h2]h6]uh9MWh;]rL(h)rM}rN(hX``confidence level @n``h0}rO(h4]h5]h3]h2]h6]uh jIh;]rPhKXconfidence level @nrQrR}rS(hUh jMubah.hubhKX0 -- confidence limits for given confidence levelrTrU}rV(hX0 -- confidence limits for given confidence levelh jIubeubaubj6)rW}rX(hX``cov @n`` -- covariance matrixrYh jh'h(h.j:h0}rZ(h4]h5]h3]h2]h6]uh9Nh:hh;]r[hd)r\}r](hjYh jWh'h(h.hhh0}r^(h4]h5]h3]h2]h6]uh9MXh;]r_(h)r`}ra(hX ``cov @n``h0}rb(h4]h5]h3]h2]h6]uh j\h;]rchKXcov @nrdre}rf(hUh j`ubah.hubhKX -- covariance matrixrgrh}ri(hX -- covariance matrixh j\ubeubaubj6)rj}rk(hX5``data`` -- number of points, data filename and titlerlh jh'h(h.j:h0}rm(h4]h5]h3]h2]h6]uh9Nh:hh;]rnhd)ro}rp(hjlh jjh'h(h.hhh0}rq(h4]h5]h3]h2]h6]uh9MYh;]rr(h)rs}rt(hX``data``h0}ru(h4]h5]h3]h2]h6]uh joh;]rvhKXdatarwrx}ry(hUh jsubah.hubhKX- -- number of points, data filename and titlerzr{}r|(hX- -- number of points, data filename and titleh joubeubaubj6)r}}r~(hX'``dataset_count`` -- number of datasetsrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh j}h'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9MZh;]r(h)r}r(hX``dataset_count``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX dataset_countrr}r(hUh jubah.hubhKX -- number of datasetsrr}r(hX -- number of datasetsh jubeubaubj6)r}r(hX6``errors @n`` -- estimated uncertainties of parametersrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9M[h;]r(h)r}r(hX ``errors @n``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX errors @nrr}r(hUh jubah.hubhKX) -- estimated uncertainties of parametersrr}r(hX) -- estimated uncertainties of parametersh jubeubaubj6)r}r(hX ``filename`` -- dataset filenamerh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9M\h;]r(h)r}r(hX ``filename``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXfilenamerr}r(hUh jubah.hubhKX -- dataset filenamerr}r(hX -- dataset filenameh jubeubaubj6)r}r(hX``fit`` -- goodness of fitrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9M]h;]r(h)r}r(hX``fit``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXfitrr}r(hUh jubah.hubhKX -- goodness of fitrr}r(hX -- goodness of fith jubeubaubj6)r}r(hX5``fit_history`` -- info about recorded parameter setsrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9M^h;]r(h)r}r(hX``fit_history``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX fit_historyrr}r(hUh jubah.hubhKX& -- info about recorded parameter setsrr}r(hX& -- info about recorded parameter setsh jubeubaubj6)r}r(hX(``formula`` -- full formula of the modelrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9M_h;]r(h)r}r(hX ``formula``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXformularr}r(hUh jubah.hubhKX -- full formula of the modelrr}r(hX -- full formula of the modelh jubeubaubj6)r}r(hX'``functions`` -- the list of %functionsrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9M`h;]r(h)r}r(hX ``functions``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX functionsrr}r(hUh jubah.hubhKX -- the list of %functionsrr}r(hX -- the list of %functionsh jubeubaubj6)r}r(hX?``gnuplot_formula`` -- full formula of the model, gnuplot stylerh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Mah;]r (h)r }r (hX``gnuplot_formula``h0}r (h4]h5]h3]h2]h6]uh jh;]rhKXgnuplot_formularr}r(hUh j ubah.hubhKX, -- full formula of the model, gnuplot stylerr}r(hX, -- full formula of the model, gnuplot styleh jubeubaubj6)r}r(hX6``guess`` -- peak-detection and linear regression inforh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mbh;]r(h)r}r(hX ``guess``h0}r (h4]h5]h3]h2]h6]uh jh;]r!hKXguessr"r#}r$(hUh jubah.hubhKX- -- peak-detection and linear regression infor%r&}r'(hX- -- peak-detection and linear regression infoh jubeubaubj6)r(}r)(hX7``guess [from:to]`` -- the same, but in the given ranger*h jh'h(h.j:h0}r+(h4]h5]h3]h2]h6]uh9Nh:hh;]r,hd)r-}r.(hj*h j(h'h(h.hhh0}r/(h4]h5]h3]h2]h6]uh9Mch;]r0(h)r1}r2(hX``guess [from:to]``h0}r3(h4]h5]h3]h2]h6]uh j-h;]r4hKXguess [from:to]r5r6}r7(hUh j1ubah.hubhKX$ -- the same, but in the given ranger8r9}r:(hX$ -- the same, but in the given rangeh j-ubeubaubj6)r;}r<(hXA``history`` -- the list of all the command issued in this sessionr=h jh'h(h.j:h0}r>(h4]h5]h3]h2]h6]uh9Nh:hh;]r?hd)r@}rA(hj=h j;h'h(h.hhh0}rB(h4]h5]h3]h2]h6]uh9Mdh;]rC(h)rD}rE(hX ``history``h0}rF(h4]h5]h3]h2]h6]uh j@h;]rGhKXhistoryrHrI}rJ(hUh jDubah.hubhKX6 -- the list of all the command issued in this sessionrKrL}rM(hX6 -- the list of all the command issued in this sessionh j@ubeubaubj6)rN}rO(hX7``history [m:n]`` -- selected commands from the historyrPh jh'h(h.j:h0}rQ(h4]h5]h3]h2]h6]uh9Nh:hh;]rRhd)rS}rT(hjPh jNh'h(h.hhh0}rU(h4]h5]h3]h2]h6]uh9Meh;]rV(h)rW}rX(hX``history [m:n]``h0}rY(h4]h5]h3]h2]h6]uh jSh;]rZhKX history [m:n]r[r\}r](hUh jWubah.hubhKX& -- selected commands from the historyr^r_}r`(hX& -- selected commands from the historyh jSubeubaubj6)ra}rb(hX5``history_summary`` -- the summary of command historyrch jh'h(h.j:h0}rd(h4]h5]h3]h2]h6]uh9Nh:hh;]rehd)rf}rg(hjch jah'h(h.hhh0}rh(h4]h5]h3]h2]h6]uh9Mfh;]ri(h)rj}rk(hX``history_summary``h0}rl(h4]h5]h3]h2]h6]uh jfh;]rmhKXhistory_summaryrnro}rp(hUh jjubah.hubhKX" -- the summary of command historyrqrr}rs(hX" -- the summary of command historyh jfubeubaubj6)rt}ru(hXK``models`` -- script that re-constructs all variables, functions and modelsrvh jh'h(h.j:h0}rw(h4]h5]h3]h2]h6]uh9Nh:hh;]rxhd)ry}rz(hjvh jth'h(h.hhh0}r{(h4]h5]h3]h2]h6]uh9Mgh;]r|(h)r}}r~(hX ``models``h0}r(h4]h5]h3]h2]h6]uh jyh;]rhKXmodelsrr}r(hUh j}ubah.hubhKXA -- script that re-constructs all variables, functions and modelsrr}r(hXA -- script that re-constructs all variables, functions and modelsh jyubeubaubj6)r}r(hX>``peaks`` -- formatted list of parameters of functions in *F*.rh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mhh;]r(h)r}r(hX ``peaks``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXpeaksrr}r(hUh jubah.hubhKX1 -- formatted list of parameters of functions in rr}r(hX1 -- formatted list of parameters of functions in h jubj8)r}r(hX*F*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXFr}r(hUh jubah.j@ubhKX.r}r(hX.h jubeubaubj6)r}r(hX2``peaks_err`` -- the same as peaks + uncertaintiesrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mih;]r(h)r}r(hX ``peaks_err``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX peaks_errrr}r(hUh jubah.hubhKX% -- the same as peaks + uncertaintiesrr}r(hX% -- the same as peaks + uncertaintiesh jubeubaubj6)r}r(hX7``prop`` *%function_name* -- parameters of the functionrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mjh;]r(h)r}r(hX``prop``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXproprr}r(hUh jubah.hubhKX r}r(hX h jubj8)r}r(hX*%function_name*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX%function_namerr}r(hUh jubah.j@ubhKX -- parameters of the functionrr}r(hX -- parameters of the functionh jubeubaubj6)r}r(hX7``refs`` *$variable_name* -- references to the variablerh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mkh;]r(h)r}r(hX``refs``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXrefsrr}r(hUh jubah.hubhKX r}r(hX h jubj8)r}r(hX*$variable_name*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX$variable_namerr}r(hUh jubah.j@ubhKX -- references to the variablerr}r(hX -- references to the variableh jubeubaubj6)r}r(hX``set`` -- the list of settingsrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mlh;]r(h)r}r(hX``set``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXsetrr}r(hUh jubah.hubhKX -- the list of settingsrr}r(hX -- the list of settingsh jubeubaubj6)r}r(hX3``set`` *option* -- the current value of the optionrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mmh;]r(h)r }r (hX``set``h0}r (h4]h5]h3]h2]h6]uh jh;]r hKXsetr r}r(hUh j ubah.hubhKX r}r(hX h jubj8)r}r(hX*option*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXoptionrr}r(hUh jubah.j@ubhKX# -- the current value of the optionrr}r(hX# -- the current value of the optionh jubeubaubj6)r}r(hX,``simplified_formula`` -- simplified formularh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]r hd)r!}r"(hjh jh'h(h.hhh0}r#(h4]h5]h3]h2]h6]uh9Mnh;]r$(h)r%}r&(hX``simplified_formula``h0}r'(h4]h5]h3]h2]h6]uh j!h;]r(hKXsimplified_formular)r*}r+(hUh j%ubah.hubhKX -- simplified formular,r-}r.(hX -- simplified formulah j!ubeubaubj6)r/}r0(hXC``simplified_gnuplot_formula`` -- simplified formula, gnuplot styler1h jh'h(h.j:h0}r2(h4]h5]h3]h2]h6]uh9Nh:hh;]r3hd)r4}r5(hj1h j/h'h(h.hhh0}r6(h4]h5]h3]h2]h6]uh9Moh;]r7(h)r8}r9(hX``simplified_gnuplot_formula``h0}r:(h4]h5]h3]h2]h6]uh j4h;]r;hKXsimplified_gnuplot_formular<r=}r>(hUh j8ubah.hubhKX% -- simplified formula, gnuplot styler?r@}rA(hX% -- simplified formula, gnuplot styleh j4ubeubaubj6)rB}rC(hXu``state`` -- generates a script that can reproduce the current state of the program. The scripts embeds all datasets.h jh'h(h.j:h0}rD(h4]h5]h3]h2]h6]uh9Nh:hh;]rEhd)rF}rG(hXu``state`` -- generates a script that can reproduce the current state of the program. The scripts embeds all datasets.h jBh'h(h.hhh0}rH(h4]h5]h3]h2]h6]uh9Mph;]rI(h)rJ}rK(hX ``state``h0}rL(h4]h5]h3]h2]h6]uh jFh;]rMhKXstaterNrO}rP(hUh jJubah.hubhKXl -- generates a script that can reproduce the current state of the program. The scripts embeds all datasets.rQrR}rS(hXl -- generates a script that can reproduce the current state of the program. The scripts embeds all datasets.h jFubeubaubj6)rT}rU(hX``title`` -- dataset titlerVh jh'h(h.j:h0}rW(h4]h5]h3]h2]h6]uh9Nh:hh;]rXhd)rY}rZ(hjVh jTh'h(h.hhh0}r[(h4]h5]h3]h2]h6]uh9Mrh;]r\(h)r]}r^(hX ``title``h0}r_(h4]h5]h3]h2]h6]uh jYh;]r`hKXtitlerarb}rc(hUh j]ubah.hubhKX -- dataset titlerdre}rf(hX -- dataset titleh jYubeubaubj6)rg}rh(hX'``types`` -- the list of function typesrih jh'h(h.j:h0}rj(h4]h5]h3]h2]h6]uh9Nh:hh;]rkhd)rl}rm(hjih jgh'h(h.hhh0}rn(h4]h5]h3]h2]h6]uh9Msh;]ro(h)rp}rq(hX ``types``h0}rr(h4]h5]h3]h2]h6]uh jlh;]rshKXtypesrtru}rv(hUh jpubah.hubhKX -- the list of function typesrwrx}ry(hX -- the list of function typesh jlubeubaubj6)rz}r{(hX&``variables`` -- the list of variablesr|h jh'h(h.j:h0}r}(h4]h5]h3]h2]h6]uh9Nh:hh;]r~hd)r}r(hj|h jzh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mth;]r(h)r}r(hX ``variables``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX variablesrr}r(hUh jubah.hubhKX -- the list of variablesrr}r(hX -- the list of variablesh jubeubaubj6)r}r(hX``version`` -- version numberrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Muh;]r(h)r}r(hX ``version``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXversionrr}r(hUh jubah.hubhKX -- version numberrr}r(hX -- version numberh jubeubaubj6)r}r(hX3``view`` -- boundaries of the visualized rectangle h jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hX2``view`` -- boundaries of the visualized rectangleh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mvh;]r(h)r}r(hX``view``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXviewrr}r(hUh jubah.hubhKX* -- boundaries of the visualized rectanglerr}r(hX* -- boundaries of the visualized rectangleh jubeubaubeubhd)r}r(hXTBoth ``info state`` and ``info history`` can be used to restore the current session.h jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mxh:hh;]r(hKXBoth rr}r(hXBoth h jubh)r}r(hX``info state``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX info staterr}r(hUh jubah.hubhKX and rr}r(hX and h jubh)r}r(hX``info history``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKX info historyrr}r(hUh jubah.hubhKX, can be used to restore the current session.rr}r(hX, can be used to restore the current session.h jubeubjX)r}r(hXV:menuselection:`Session --> Save State` and :menuselection:`Session --> Save History`.h jh'h(h.j\h0}r(h4]h5]rUadmonition-in-the-guirah3]h2]h6]uh9Nh:hh;]r(hD)r}r(hX In the GUIrh jh'h(h.hHh0}r(h4]h5]h3]h2]h6]uh9M{h;]rhKX In the GUIrr}r(hjh jubaubhd)r}r(hXV:menuselection:`Session --> Save State` and :menuselection:`Session --> Save History`.h jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9M}h;]r(cdocutils.nodes inline r)r}r(hUh0}r(UrawtextX':menuselection:`Session --> Save State`h2]h3]h4]h5]rX menuselectionrah6]uh jh;]rhKXSession ‣ Save Staterr}r(hUh jubah.UinlinerubhKX and rr}r(hX and h jubj)r}r(hUh0}r(UrawtextX):menuselection:`Session --> Save History`h2]h3]h4]h5]rX menuselectionrah6]uh jh;]rhKXSession ‣ Save Historyrr}r(hUh jubah.jubhKX.r}r(hX.h jubeubeubeubh!)r}r(hUh jh'h(h.h p pi, pi^2, pi^3 3.14159 9.8696 31.0063 =-> with numeric_format='%.15f' print pi 3.141592653589793 =-> p '2+3 =', 2+3 2+3 = 5h jh'h(h.hqh0}r(hshth2]h3]h4]h5]h6]uh9Mh:hh;]rhKX=-> p pi, pi^2, pi^3 3.14159 9.8696 31.0063 =-> with numeric_format='%.15f' print pi 3.141592653589793 =-> p '2+3 =', 2+3 2+3 = 5rr}r(hUh jubaubhd)r}r(hXThe other valid arguments are ``filename`` and ``title``. They are useful for listing the same values for multiple datasets, e.g.::h jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mh:hh;]r(hKXThe other valid arguments are rr}r(hXThe other valid arguments are h jubh)r}r(hX ``filename``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXfilenamer r!}r"(hUh jubah.hubhKX and r#r$}r%(hX and h jubh)r&}r'(hX ``title``h0}r((h4]h5]h3]h2]h6]uh jh;]r)hKXtitler*r+}r,(hUh j&ubah.hubhKXJ. They are useful for listing the same values for multiple datasets, e.g.:r-r.}r/(hXJ. They are useful for listing the same values for multiple datasets, e.g.:h jubeubhn)r0}r1(hX2=-> @*: print filename, F[0].area, F[0].area.errorh jh'h(h.hqh0}r2(hshth2]h3]h4]h5]h6]uh9Mh:hh;]r3hKX2=-> @*: print filename, F[0].area, F[0].area.errorr4r5}r6(hUh j0ubaubhd)r7}r8(hXz``print`` can also print a list where each line corresponds to one data point, as described in the section :ref:`dexport`.h jh'h(h.hhh0}r9(h4]h5]h3]h2]h6]uh9Mh:hh;]r:(h)r;}r<(hX ``print``h0}r=(h4]h5]h3]h2]h6]uh j7h;]r>hKXprintr?r@}rA(hUh j;ubah.hubhKXb can also print a list where each line corresponds to one data point, as described in the section rBrC}rD(hXb can also print a list where each line corresponds to one data point, as described in the section h j7ubj)rE}rF(hX:ref:`dexport`rGh j7h'h(h.jh0}rH(UreftypeXrefjjXdexportU refdomainXstdrIh2]h3]U refexplicith4]h5]h6]jjuh9Mh;]rJj)rK}rL(hjGh0}rM(h4]h5]rN(jjIXstd-refrOeh3]h2]h6]uh jEh;]rPhKXdexportrQrR}rS(hUh jKubah.jubaubhKX.rT}rU(hX.h j7ubeubhd)rV}rW(hXAs an exception, ``print expression > filename`` does not work if the filename is not enclosed in single quotes. That is because the parser interprets ``>`` as a part of the expression. Just use quotes (``print 2+3 > 'tmp.dat'``).h jh'h(h.hhh0}rX(h4]h5]h3]h2]h6]uh9Mh:hh;]rY(hKXAs an exception, rZr[}r\(hXAs an exception, h jVubh)r]}r^(hX``print expression > filename``h0}r_(h4]h5]h3]h2]h6]uh jVh;]r`hKXprint expression > filenamerarb}rc(hUh j]ubah.hubhKXg does not work if the filename is not enclosed in single quotes. That is because the parser interprets rdre}rf(hXg does not work if the filename is not enclosed in single quotes. That is because the parser interprets h jVubh)rg}rh(hX``>``h0}ri(h4]h5]h3]h2]h6]uh jVh;]rjhKX>rk}rl(hUh jgubah.hubhKX/ as a part of the expression. Just use quotes (rmrn}ro(hX/ as a part of the expression. Just use quotes (h jVubh)rp}rq(hX``print 2+3 > 'tmp.dat'``h0}rr(h4]h5]h3]h2]h6]uh jVh;]rshKXprint 2+3 > 'tmp.dat'rtru}rv(hUh jpubah.hubhKX).rwrx}ry(hX).h jVubeubeubh!)rz}r{(hUh jh'h(h.h debug der sin(a) + 3*exp(b/a) f(a, b) = sin(a)+3*exp(b/a) df / d a = cos(a)-3*exp(b/a)*b/a^2 df / d b = 3*exp(b/a)/a h jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]r(hd)r}r(hX4``der`` *mathematic-function* -- shows derivatives::h jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mh;]r(h)r}r(hX``der``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXderrr}r(hUh jubah.hubhKX r}r(hX h jubj8)r}r(hX*mathematic-function*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXmathematic-functionrr}r(hUh jubah.j@ubhKX -- shows derivatives:rr}r(hX -- shows derivatives:h jubeubhn)r}r(hXx=-> debug der sin(a) + 3*exp(b/a) f(a, b) = sin(a)+3*exp(b/a) df / d a = cos(a)-3*exp(b/a)*b/a^2 df / d b = 3*exp(b/a)/ah jh.hqh0}r(hshth2]h3]h4]h5]h6]uh9Mh;]rhKXx=-> debug der sin(a) + 3*exp(b/a) f(a, b) = sin(a)+3*exp(b/a) df / d a = cos(a)-3*exp(b/a)*b/a^2 df / d b = 3*exp(b/a)/arr}r(hUh jubaubeubj6)r}r(hXL``df`` *x* -- compares the symbolic and numerical derivatives of *F* in *x*.rh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mh;]r(h)r}r(hX``df``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXdfrr}r(hUh jubah.hubhKX r}r(hX h jubj8)r}r(hX*x*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXxr}r(hUh jubah.j@ubhKX7 -- compares the symbolic and numerical derivatives of rr}r(hX7 -- compares the symbolic and numerical derivatives of h jubj8)r}r(hX*F*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXFr}r(hUh jubah.j@ubhKX in rr}r(hX in h jubj8)r}r(hX*x*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXxr}r(hUh jubah.j@ubhKX.r}r(hX.h jubeubaubj6)r}r(hX<``lex`` *command* -- the list of tokens from the Fityk lexerrh jh'h(h.j:h0}r(h4]h5]h3]h2]h6]uh9Nh:hh;]rhd)r}r(hjh jh'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mh;]r(h)r}r(hX``lex``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXlexrr}r(hUh jubah.hubhKX r}r(hX h jubj8)r}r(hX *command*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXcommandrr}r(hUh jubah.j@ubhKX+ -- the list of tokens from the Fityk lexerrr}r(hX+ -- the list of tokens from the Fityk lexerh jubeubaubj6)r }r (hX?``parse`` *command* -- show the command as stored after parsingr h jh'h(h.j:h0}r (h4]h5]h3]h2]h6]uh9Nh:hh;]r hd)r}r(hj h j h'h(h.hhh0}r(h4]h5]h3]h2]h6]uh9Mh;]r(h)r}r(hX ``parse``h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXparserr}r(hUh jubah.hubhKX r}r(hX h jubj8)r}r(hX *command*h0}r(h4]h5]h3]h2]h6]uh jh;]rhKXcommandrr }r!(hUh jubah.j@ubhKX, -- show the command as stored after parsingr"r#}r$(hX, -- show the command as stored after parsingh jubeubaubj6)r%}r&(hX4``expr`` *expression* -- VM code from the expressionr'h jh'h(h.j:h0}r((h4]h5]h3]h2]h6]uh9Nh:hh;]r)hd)r*}r+(hj'h j%h'h(h.hhh0}r,(h4]h5]h3]h2]h6]uh9Mh;]r-(h)r.}r/(hX``expr``h0}r0(h4]h5]h3]h2]h6]uh j*h;]r1hKXexprr2r3}r4(hUh j.ubah.hubhKX r5}r6(hX h j*ubj8)r7}r8(hX *expression*h0}r9(h4]h5]h3]h2]h6]uh j*h;]r:hKX expressionr;r<}r=(hUh j7ubah.j@ubhKX -- VM code from the expressionr>r?}r@(hX -- VM code from the expressionh j*ubeubaubj6)rA}rB(hX'``rd`` -- derivatives for all variablesrCh jh'h(h.j:h0}rD(h4]h5]h3]h2]h6]uh9Nh:hh;]rEhd)rF}rG(hjCh jAh'h(h.hhh0}rH(h4]h5]h3]h2]h6]uh9Mh;]rI(h)rJ}rK(hX``rd``h0}rL(h4]h5]h3]h2]h6]uh jFh;]rMhKXrdrNrO}rP(hUh jJubah.hubhKX! -- derivatives for all variablesrQrR}rS(hX! -- derivatives for all variablesh jFubeubaubj6)rT}rU(hX'``%function`` -- bytecode, if availablerVh jh'h(h.j:h0}rW(h4]h5]h3]h2]h6]uh9Nh:hh;]rXhd)rY}rZ(hjVh jTh'h(h.hhh0}r[(h4]h5]h3]h2]h6]uh9Mh;]r\(h)r]}r^(hX ``%function``h0}r_(h4]h5]h3]h2]h6]uh jYh;]r`hKX %functionrarb}rc(hUh j]ubah.hubhKX -- bytecode, if availablerdre}rf(hX -- bytecode, if availableh jYubeubaubj6)rg}rh(hX``$variable`` -- derivatives h jh'h(h.j:h0}ri(h4]h5]h3]h2]h6]uh9Nh:hh;]rjhd)rk}rl(hX``$variable`` -- derivativesrmh jgh'h(h.hhh0}rn(h4]h5]h3]h2]h6]uh9Mh;]ro(h)rp}rq(hX ``$variable``h0}rr(h4]h5]h3]h2]h6]uh jkh;]rshKX $variablertru}rv(hUh jpubah.hubhKX -- derivativesrwrx}ry(hX -- derivativesh jkubeubaubeubeubeubh!)rz}r{(hUh h%h'h(h.h r? }r@ (hX8 option, if given, and processes command line arguments:h j ubeubj/)rA }rB (hUh j h'h(h.j2h0}rC (j4X-h2]h3]h4]h5]h6]uh9Mh:hh;]rD (j6)rE }rF (hXif the argument starts with ``=->``, the string following ``=->`` is regarded as a command and executed (otherwise, it is regarded as a filename), h jA h'h(h.j:h0}rG (h4]h5]h3]h2]h6]uh9Nh:hh;]rH hd)rI }rJ (hXif the argument starts with ``=->``, the string following ``=->`` is regarded as a command and executed (otherwise, it is regarded as a filename),h jE h'h(h.hhh0}rK (h4]h5]h3]h2]h6]uh9Mh;]rL (hKXif the argument starts with rM rN }rO (hXif the argument starts with h jI ubh)rP }rQ (hX``=->``h0}rR (h4]h5]h3]h2]h6]uh jI h;]rS hKX=->rT rU }rV (hUh jP ubah.hubhKX, the string following rW rX }rY (hX, the string following h jI ubh)rZ }r[ (hX``=->``h0}r\ (h4]h5]h3]h2]h6]uh jI h;]r] hKX=->r^ r_ }r` (hUh jZ ubah.hubhKXQ is regarded as a command and executed (otherwise, it is regarded as a filename),ra rb }rc (hXQ is regarded as a command and executed (otherwise, it is regarded as a filename),h jI ubeubaubj6)rd }re (hXif the filename has extension ".fit" or the file begins with a "# Fityk" string, it is assumed to be a script and is executed, h jA h'h(h.j:h0}rf (h4]h5]h3]h2]h6]uh9Nh:hh;]rg hd)rh }ri (hX~if the filename has extension ".fit" or the file begins with a "# Fityk" string, it is assumed to be a script and is executed,rj h jd h'h(h.hhh0}rk (h4]h5]h3]h2]h6]uh9Mh;]rl hKX~if the filename has extension ".fit" or the file begins with a "# Fityk" string, it is assumed to be a script and is executed,rm rn }ro (hjj h jh ubaubaubj6)rp }rq (hX}otherwise, it is assumed to be a data file; columns and data blocks can be specified in the normal way, see :ref:`dataload`. h jA h'h(h.j:h0}rr (h4]h5]h3]h2]h6]uh9Nh:hh;]rs hd)rt }ru (hX|otherwise, it is assumed to be a data file; columns and data blocks can be specified in the normal way, see :ref:`dataload`.h jp h'h(h.hhh0}rv (h4]h5]h3]h2]h6]uh9Mh;]rw (hKXlotherwise, it is assumed to be a data file; columns and data blocks can be specified in the normal way, see rx ry }rz (hXlotherwise, it is assumed to be a data file; columns and data blocks can be specified in the normal way, see h jt ubj)r{ }r| (hX:ref:`dataload`r} h jt h'h(h.jh0}r~ (UreftypeXrefjjXdataloadU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Mh;]r j)r }r (hj} h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j{ h;]r hKXdataloadr r }r (hUh j ubah.jubaubhKX.r }r (hX.h jt ubeubaubeubj)r }r (hUh j h'h(h.jh0}r (UlangXnoneUlinenothresholdI9223372036854775807 h2]h3]h4]h5]h6]uh9Mh:hh;]ubhd)r }r (hXThere are also other parameters to the CLI and GUI versions of the program. Option "-h" ("/h" on MS Windows) gives the full listing::h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Mh:hh;]r hKXThere are also other parameters to the CLI and GUI versions of the program. Option "-h" ("/h" on MS Windows) gives the full listing:r r }r (hXThere are also other parameters to the CLI and GUI versions of the program. Option "-h" ("/h" on MS Windows) gives the full listing:h j ubaubhn)r }r (hX wojdyr@ubu:~/fityk/src$ ./fityk -h Usage: fityk \[-h] \[-V] \[-c ] \[-I] \[-r] \[script or data file...] -h, --help show this help message -V, --version output version information and exit -c, --cmd= script passed in as string -g, --config= choose GUI configuration -I, --no-init don't process $HOME/.fityk/init file -r, --reorder reorder data (50.xy before 100.xy) wojdyr@ubu:~/foo$ cfityk -h Usage: cfityk \[-h] \[-V] \[-c ] \[script or data file...] -h, --help show this help message -V, --version output version information and exit -c, --cmd= script passed in as string -I, --no-init don't process $HOME/.fityk/init file -q, --quit don't enter interactive shellh j h'h(h.hqh0}r (hshth2]h3]h4]h5]h6]uh9Mh:hh;]r hKX wojdyr@ubu:~/fityk/src$ ./fityk -h Usage: fityk \[-h] \[-V] \[-c ] \[-I] \[-r] \[script or data file...] -h, --help show this help message -V, --version output version information and exit -c, --cmd= script passed in as string -g, --config= choose GUI configuration -I, --no-init don't process $HOME/.fityk/init file -r, --reorder reorder data (50.xy before 100.xy) wojdyr@ubu:~/foo$ cfityk -h Usage: cfityk \[-h] \[-V] \[-c ] \[script or data file...] -h, --help show this help message -V, --version output version information and exit -c, --cmd= script passed in as string -I, --no-init don't process $HOME/.fityk/init file -q, --quit don't enter interactive shellr r }r (hUh j ubaubhd)r }r (hX;The example of non-interactive using CLI version on Linux::r h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Mh:hh;]r hKX:The example of non-interactive using CLI version on Linux:r r }r (hX:The example of non-interactive using CLI version on Linux:h j ubaubhn)r }r (hXwojdyr@ubu:~/foo$ ls *.rdf dat_a.rdf dat_r.rdf out.rdf wojdyr@ubu:~/foo$ cfityk -q -I "=-> set verbosity=-1, autoplot=0" \ > *.rdf "=-> @*: print min(x if y > 0)" in @0 dat_a: 1.8875 in @1 dat_r: 1.5105 in @2 out: 1.8305h j h'h(h.hqh0}r (hshth2]h3]h4]h5]h6]uh9Mh:hh;]r hKXwojdyr@ubu:~/foo$ ls *.rdf dat_a.rdf dat_r.rdf out.rdf wojdyr@ubu:~/foo$ cfityk -q -I "=-> set verbosity=-1, autoplot=0" \ > *.rdf "=-> @*: print min(x if y > 0)" in @0 dat_a: 1.8875 in @1 dat_r: 1.5105 in @2 out: 1.8305r r }r (hUh j ubaubeubeubh'h(h.h Settings`). The GUI configuration (colors, fonts, etc.) is changed in a different way (:menuselection:`GUI --> ...`) and is not covered here.h h"h'h(h.j\h0}r (h4]h5]r Uadmonition-in-the-guir ah3]h2]h6]uh9Nh:hh;]r (hD)r }r (hX In the GUIr h j h'h(h.hHh0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKX In the GUIr r }r (hj h j ubaubhd)r }r (hXKthe options can be set in a dialog (:menuselection:`Session --> Settings`).h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKX$the options can be set in a dialog (r r }r (hX$the options can be set in a dialog (h j ubj)r }r (hUh0}r (UrawtextX%:menuselection:`Session --> Settings`h2]h3]h4]h5]r X menuselectionr ah6]uh j h;]r! hKXSession ‣ Settingsr" r# }r$ (hUh j ubah.jubhKX).r% r& }r' (hX).h j ubeubhd)r( }r) (hXThe GUI configuration (colors, fonts, etc.) is changed in a different way (:menuselection:`GUI --> ...`) and is not covered here.h j h'h(h.hhh0}r* (h4]h5]h3]h2]h6]uh9Kh;]r+ (hKXKThe GUI configuration (colors, fonts, etc.) is changed in a different way (r, r- }r. (hXKThe GUI configuration (colors, fonts, etc.) is changed in a different way (h j( ubj)r/ }r0 (hUh0}r1 (UrawtextX:menuselection:`GUI --> ...`h2]h3]h4]h5]r2 X menuselectionr3 ah6]uh j( h;]r4 hKX GUI ‣ ...r5 r6 }r7 (hUh j/ ubah.jubhKX) and is not covered here.r8 r9 }r: (hX) and is not covered here.h j( ubeubeubhd)r; }r< (hX>It is possible to change the value of the option temporarily::r= h h"h'h(h.hhh0}r> (h4]h5]h3]h2]h6]uh9Kh:hh;]r? hKX=It is possible to change the value of the option temporarily:r@ rA }rB (hX=It is possible to change the value of the option temporarily:h j; ubaubhn)rC }rD (hX6with option1=value1 [,option2=value2] command args...h h"h'h(h.hqh0}rE (hshth2]h3]h4]h5]h6]uh9Kh:hh;]rF hKX6with option1=value1 [,option2=value2] command args...rG rH }rI (hUh jC ubaubhd)rJ }rK (hX For example::rL h h"h'h(h.hhh0}rM (h4]h5]h3]h2]h6]uh9Kh:hh;]rN hKX For example:rO rP }rQ (hX For example:h jJ ubaubhn)rR }rS (hX|info set fitting_method # show the current fitting method set fitting_method = nelder_mead_simplex # change the method # change the method only for this one fit command with fitting_method = levenberg_marquardt fit 10 # and now the default method is back Nelder-Mead # multiple comma-separated options can be given with fitting_method=levenberg_marquardt, verbosity=quiet fit 10h h"h'h(h.hqh0}rT (hshth2]h3]h4]h5]h6]uh9Kh:hh;]rU hKX|info set fitting_method # show the current fitting method set fitting_method = nelder_mead_simplex # change the method # change the method only for this one fit command with fitting_method = levenberg_marquardt fit 10 # and now the default method is back Nelder-Mead # multiple comma-separated options can be given with fitting_method=levenberg_marquardt, verbosity=quiet fit 10rV rW }rX (hUh jR ubaubhd)rY }rZ (hXThe list of available options:r[ h h"h'h(h.hhh0}r\ (h4]h5]h3]h2]h6]uh9Kh:hh;]r] hKXThe list of available options:r^ r_ }r` (hj[ h jY ubaubcdocutils.nodes definition_list ra )rb }rc (hUh h"h'h(h.Udefinition_listrd h0}re (h4]h5]h3]h2]h6]uh9Nh:hh;]rf (cdocutils.nodes definition_list_item rg )rh }ri (hX)autoplot See :ref:`autoplot `. h jb h'h(h.Udefinition_list_itemrj h0}rk (h4]h5]h3]h2]h6]uh9Kh;]rl (cdocutils.nodes term rm )rn }ro (hXautoplotrp h jh h'h(h.Utermrq h0}rr (h4]h5]h3]h2]h6]uh9Kh;]rs hKXautoplotrt ru }rv (hjp h jn ubaubcdocutils.nodes definition rw )rx }ry (hUh0}rz (h4]h5]h3]h2]h6]uh jh h;]r{ hd)r| }r} (hXSee :ref:`autoplot `.h jx h'h(h.hhh0}r~ (h4]h5]h3]h2]h6]uh9Kh;]r (hKXSee r r }r (hXSee h j| ubj)r }r (hX:ref:`autoplot `r h j| h'h(h.jh0}r (UreftypeXrefjjXautoplotU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKXautoplotr r }r (hUh j ubah.jubaubhKX.r }r (hX.h j| ubeubah.U definitionr ubeubjg )r }r (hXecwd Current working directory or empty string if it was not set explicitely. Affects relative paths. h jb h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hXcwdr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXcwdr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hX`Current working directory or empty string if it was not set explicitely. Affects relative paths.r h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKX`Current working directory or empty string if it was not set explicitely. Affects relative paths.r r }r (hj h j ubaubah.j ubeubjg )r }r (hXdefault_sigma Default *y* standard deviation. See :ref:`weights`. Possible values: ``sqrt`` max(*y*:sup:`1/2`, 1) and ``one`` (1). h jb h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hX default_sigmar h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKX default_sigmar r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hXtDefault *y* standard deviation. See :ref:`weights`. Possible values: ``sqrt`` max(*y*:sup:`1/2`, 1) and ``one`` (1).h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKXDefault r r }r (hXDefault h j ubj8)r }r (hX*y*h0}r (h4]h5]h3]h2]h6]uh j h;]r hKXyr }r (hUh j ubah.j@ubhKX standard deviation. See r r }r (hX standard deviation. See h j ubj)r }r (hX:ref:`weights`r h j h'h(h.jh0}r (UreftypeXrefjjXweightsU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKXweightsr r }r (hUh j ubah.jubaubhKX. Possible values: r r }r (hX. Possible values: h j ubh)r }r (hX``sqrt``h0}r (h4]h5]h3]h2]h6]uh j h;]r hKXsqrtr r }r (hUh j ubah.hubhKX max(r r }r (hX max(h j ubj8)r }r (hX*y*h0}r (h4]h5]h3]h2]h6]uh j h;]r hKXyr }r (hUh j ubah.j@ubcdocutils.nodes superscript r )r }r (hX :sup:`1/2`h0}r (h4]h5]h3]h2]h6]uh j h;]r hKX1/2r r }r (hUh j ubah.U superscriptr ubhKX , 1) and r r }r (hX , 1) and h j ubh)r }r (hX``one``h0}r (h4]h5]h3]h2]h6]uh j h;]r hKXoner r }r (hUh j ubah.hubhKX (1).r r }r (hX (1).h j ubeubah.j ubeubjg )r }r (hX@domain_percent See :ref:`the section about variables `. h jb h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hXdomain_percentr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXdomain_percentr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hX0See :ref:`the section about variables `.h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKXSee r r }r (hXSee h j ubj)r }r (hX+:ref:`the section about variables `r h j h'h(h.jh0}r (UreftypeXrefjjXdomainU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r! j)r" }r# (hj h0}r$ (h4]h5]r% (jj Xstd-refr& eh3]h2]h6]uh j h;]r' hKXthe section about variablesr( r) }r* (hUh j" ubah.jubaubhKX.r+ }r, (hX.h j ubeubah.j ubeubeubh+)r- }r. (hX .. _epsilon:h h"h'h(h.h/h0}r/ (h2]h3]h4]h5]h6]h7Uepsilonr0 uh9Kh:hh;]ubja )r1 }r2 (hUh h"h'h(h)}r3 h j- sh.jd h0}r4 (h4]h5]h3]h2]r5 j0 ah6]r6 h auh9Nh:hhA}r7 j0 j- sh;]r8 (jg )r9 }r: (hXrepsilon The *ε* value used to test floating-point numbers *a* and *b* for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): \|\ *a−b*\ | < *ε*. Default value: 10\ :sup:`-12`. You may need to decrease it when working with very small numbers. h j1 h'h(h.jj h0}r; (h4]h5]h3]h2]h6]uh9Kh;]r< (jm )r= }r> (hXepsilonr? h j9 h'h(h.jq h0}r@ (h4]h5]h3]h2]h6]uh9Kh;]rA hKXepsilonrB rC }rD (hj? h j= ubaubjw )rE }rF (hUh0}rG (h4]h5]h3]h2]h6]uh j9 h;]rH hd)rI }rJ (hXiThe *ε* value used to test floating-point numbers *a* and *b* for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): \|\ *a−b*\ | < *ε*. Default value: 10\ :sup:`-12`. You may need to decrease it when working with very small numbers.h jE h'h(h.hhh0}rK (h4]h5]h3]h2]h6]uh9Kh;]rL (hKXThe rM rN }rO (hXThe h jI ubj8)rP }rQ (hX*ε*h0}rR (h4]h5]h3]h2]h6]uh jI h;]rS hKXεrT }rU (hUh jP ubah.j@ubhKX+ value used to test floating-point numbers rV rW }rX (hX+ value used to test floating-point numbers h jI ubj8)rY }rZ (hX*a*h0}r[ (h4]h5]h3]h2]h6]uh jI h;]r\ hKXar] }r^ (hUh jY ubah.j@ubhKX and r_ r` }ra (hX and h jI ubj8)rb }rc (hX*b*h0}rd (h4]h5]h3]h2]h6]uh jI h;]re hKXbrf }rg (hUh jb ubah.j@ubhKX for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): |rh ri }rj (hX for equality (it is well known that due to rounding errors the equality test for two numbers should have some tolerance, and the tolerance should be tailored to the application): \|\ h jI ubj8)rk }rl (hX*a−b*h0}rm (h4]h5]h3]h2]h6]uh jI h;]rn hKXa−bro rp }rq (hUh jk ubah.j@ubhKX| < rr rs }rt (hX\ | < h jI ubj8)ru }rv (hX*ε*h0}rw (h4]h5]h3]h2]h6]uh jI h;]rx hKXεry }rz (hUh ju ubah.j@ubhKX. Default value: 10r{ r| }r} (hX. Default value: 10\ h jI ubj )r~ }r (hX :sup:`-12`h0}r (h4]h5]h3]h2]h6]uh jI h;]r hKX-12r r }r (hUh j~ ubah.j ubhKXC. You may need to decrease it when working with very small numbers.r r }r (hXC. You may need to decrease it when working with very small numbers.h jI ubeubah.j ubeubjg )r }r (hX0fit_replot Refresh the plot when fitting (0/1). h j1 h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hX fit_replotr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKX fit_replotr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hX$Refresh the plot when fitting (0/1).r h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKX$Refresh the plot when fitting (0/1).r r }r (hj h j ubaubah.j ubeubjg )r }r (hX'fitting_method See :ref:`fitting_cmd`. h j1 h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hXfitting_methodr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXfitting_methodr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hXSee :ref:`fitting_cmd`.h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKXSee r r }r (hXSee h j ubj)r }r (hX:ref:`fitting_cmd`r h j h'h(h.jh0}r (UreftypeXrefjjX fitting_cmdU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKX fitting_cmdr r }r (hUh j ubah.jubaubhKX.r }r (hX.h j ubeubah.j ubeubjg )r }r (hXUfunction_cutoff See :ref:`description in the chapter about model `. h j1 h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hXfunction_cutoffr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXfunction_cutoffr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hXDSee :ref:`description in the chapter about model `.h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKXSee r r }r (hXSee h j ubj)r }r (hX?:ref:`description in the chapter about model `r h j h'h(h.jh0}r (UreftypeXrefjjXfunction_cutoffU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKX&description in the chapter about modelr r }r (hUh j ubah.jubaubhKX.r }r (hX.h j ubeubah.j ubeubjg )r }r (hX$height_correction See :ref:`guess`. h j1 h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hXheight_correctionr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXheight_correctionr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hXSee :ref:`guess`.h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKXSee r r }r (hXSee h j ubj)r }r (hX :ref:`guess`r h j h'h(h.jh0}r (UreftypeXrefjjXguessU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKXguessr r }r (hUh j ubah.jubaubhKX.r }r (hX.h j ubeubah.j ubeubjg )r }r (hXMlm_* Setting to tune the :ref:`Levenberg-Marquardt ` fitting method. h j1 h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hXlm_*r h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXlm_*r! r" }r# (hj h j ubaubjw )r$ }r% (hUh0}r& (h4]h5]h3]h2]h6]uh j h;]r' hd)r( }r) (hXGSetting to tune the :ref:`Levenberg-Marquardt ` fitting method.h j$ h'h(h.hhh0}r* (h4]h5]h3]h2]h6]uh9Kh;]r+ (hKXSetting to tune the r, r- }r. (hXSetting to tune the h j( ubj)r/ }r0 (hX#:ref:`Levenberg-Marquardt `r1 h j( h'h(h.jh0}r2 (UreftypeXrefjjXlevmarU refdomainXstdr3 h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r4 j)r5 }r6 (hj1 h0}r7 (h4]h5]r8 (jj3 Xstd-refr9 eh3]h2]h6]uh j/ h;]r: hKXLevenberg-Marquardtr; r< }r= (hUh j5 ubah.jubaubhKX fitting method.r> r? }r@ (hX fitting method.h j( ubeubah.j ubeubjg )rA }rB (hX/log_full Log output together with input (0/1). h j1 h'h(h.jj h0}rC (h4]h5]h3]h2]h6]uh9Kh:hh;]rD (jm )rE }rF (hXlog_fullrG h jA h'h(h.jq h0}rH (h4]h5]h3]h2]h6]uh9Kh;]rI hKXlog_fullrJ rK }rL (hjG h jE ubaubjw )rM }rN (hUh0}rO (h4]h5]h3]h2]h6]uh jA h;]rP hd)rQ }rR (hX%Log output together with input (0/1).rS h jM h'h(h.hhh0}rT (h4]h5]h3]h2]h6]uh9Kh;]rU hKX%Log output together with input (0/1).rV rW }rX (hjS h jQ ubaubah.j ubeubjg )rY }rZ (hXIlogfile String. File where the commands are logged. Empty -- no logging. h j1 h'h(h.jj h0}r[ (h4]h5]h3]h2]h6]uh9Kh:hh;]r\ (jm )r] }r^ (hXlogfiler_ h jY h'h(h.jq h0}r` (h4]h5]h3]h2]h6]uh9Kh;]ra hKXlogfilerb rc }rd (hj_ h j] ubaubjw )re }rf (hUh0}rg (h4]h5]h3]h2]h6]uh jY h;]rh hd)ri }rj (hX@String. File where the commands are logged. Empty -- no logging.rk h je h'h(h.hhh0}rl (h4]h5]h3]h2]h6]uh9Kh;]rm hKX@String. File where the commands are logged. Empty -- no logging.rn ro }rp (hjk h ji ubaubah.j ubeubjg )rq }rr (hXqmax_fitting_time Stop fitting when this number of seconds of processor time is exceeded. See :ref:`fitting_cmd`. h j1 h'h(h.jj h0}rs (h4]h5]h3]h2]h6]uh9Kh:hh;]rt (jm )ru }rv (hXmax_fitting_timerw h jq h'h(h.jq h0}rx (h4]h5]h3]h2]h6]uh9Kh;]ry hKXmax_fitting_timerz r{ }r| (hjw h ju ubaubjw )r} }r~ (hUh0}r (h4]h5]h3]h2]h6]uh jq h;]r hd)r }r (hX_Stop fitting when this number of seconds of processor time is exceeded. See :ref:`fitting_cmd`.h j} h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKXLStop fitting when this number of seconds of processor time is exceeded. See r r }r (hXLStop fitting when this number of seconds of processor time is exceeded. See h j ubj)r }r (hX:ref:`fitting_cmd`r h j h'h(h.jh0}r (UreftypeXrefjjX fitting_cmdU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKX fitting_cmdr r }r (hUh j ubah.jubaubhKX.r }r (hX.h j ubeubah.j ubeubjg )r }r (hX-max_wssr_evaluations See :ref:`fitting_cmd`. h j1 h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hXmax_wssr_evaluationsr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXmax_wssr_evaluationsr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hXSee :ref:`fitting_cmd`.h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKXSee r r }r (hXSee h j ubj)r }r (hX:ref:`fitting_cmd`r h j h'h(h.jh0}r (UreftypeXrefjjX fitting_cmdU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKX fitting_cmdr r }r (hUh j ubah.jubaubhKX.r }r (hX.h j ubeubah.j ubeubjg )r }r (hXVnm_* Setting to tune the :ref:`Nelder-Mead downhill simplex ` fitting method. h j1 h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh:hh;]r (jm )r }r (hXnm_*r h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXnm_*r r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hXPSetting to tune the :ref:`Nelder-Mead downhill simplex ` fitting method.h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKXSetting to tune the r r }r (hXSetting to tune the h j ubj)r }r (hX,:ref:`Nelder-Mead downhill simplex `r h j h'h(h.jh0}r (UreftypeXrefjjXnelderU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Kh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKXNelder-Mead downhill simplexr r }r (hUh j ubah.jubaubhKX fitting method.r r }r (hX fitting method.h j ubeubah.j ubeubeubh+)r }r (hX.. _numeric_format:h h"h'h(h.h/h0}r (h2]h3]h4]h5]h6]h7Unumeric-formatr uh9Kh:hh;]ubja )r }r (hUh h"h'h(h)}r hj sh.jd h0}r (h4]h5]h3]h2]r j ah6]r hauh9Nh:hhA}r j j sh;]r (jg )r }r (hXnumeric_format Format of numbers printed by the ``info`` command. It takes as a value a format string, the same as ``sprintf()`` in the C language. For example ``set numeric_format='%.3f'`` changes the precision of numbers to 3 digits after the decimal point. Default value: ``%g``. h j h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Kh;]r (jm )r }r (hXnumeric_formatr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Kh;]r hKXnumeric_formatr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hX Format of numbers printed by the ``info`` command. It takes as a value a format string, the same as ``sprintf()`` in the C language. For example ``set numeric_format='%.3f'`` changes the precision of numbers to 3 digits after the decimal point. Default value: ``%g``.h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Kh;]r (hKX!Format of numbers printed by the r r }r (hX!Format of numbers printed by the h j ubh)r }r (hX``info``h0}r (h4]h5]h3]h2]h6]uh j h;]r hKXinfor r }r (hUh j ubah.hubhKX; command. It takes as a value a format string, the same as r r }r (hX; command. It takes as a value a format string, the same as h j ubh)r }r (hX ``sprintf()``h0}r (h4]h5]h3]h2]h6]uh j h;]r hKX sprintf()r r }r (hUh j ubah.hubhKX in the C language. For example r r }r (hX in the C language. For example h j ubh)r! }r" (hX``set numeric_format='%.3f'``h0}r# (h4]h5]h3]h2]h6]uh j h;]r$ hKXset numeric_format='%.3f'r% r& }r' (hUh j! ubah.hubhKXV changes the precision of numbers to 3 digits after the decimal point. Default value: r( r) }r* (hXV changes the precision of numbers to 3 digits after the decimal point. Default value: h j ubh)r+ }r, (hX``%g``h0}r- (h4]h5]h3]h2]h6]uh j h;]r. hKX%gr/ r0 }r1 (hUh j+ ubah.hubhKX.r2 }r3 (hX.h j ubeubah.j ubeubjg )r4 }r5 (hXon_error Action performed on error. If the option is set to ``stop`` (default) and the error happens in script, the script is stopped. Other possible values are ``nothing`` (do nothing) and ``exit`` (finish program -- ensures that no error can be overlooked). h j h'h(h.jj h0}r6 (h4]h5]h3]h2]h6]uh9Kh:hh;]r7 (jm )r8 }r9 (hXon_errorr: h j4 h'h(h.jq h0}r; (h4]h5]h3]h2]h6]uh9Kh;]r< hKXon_errorr= r> }r? (hj: h j8 ubaubjw )r@ }rA (hUh0}rB (h4]h5]h3]h2]h6]uh j4 h;]rC hd)rD }rE (hXAction performed on error. If the option is set to ``stop`` (default) and the error happens in script, the script is stopped. Other possible values are ``nothing`` (do nothing) and ``exit`` (finish program -- ensures that no error can be overlooked).h j@ h'h(h.hhh0}rF (h4]h5]h3]h2]h6]uh9Kh;]rG (hKX3Action performed on error. If the option is set to rH rI }rJ (hX3Action performed on error. If the option is set to h jD ubh)rK }rL (hX``stop``h0}rM (h4]h5]h3]h2]h6]uh jD h;]rN hKXstoprO rP }rQ (hUh jK ubah.hubhKX] (default) and the error happens in script, the script is stopped. Other possible values are rR rS }rT (hX] (default) and the error happens in script, the script is stopped. Other possible values are h jD ubh)rU }rV (hX ``nothing``h0}rW (h4]h5]h3]h2]h6]uh jD h;]rX hKXnothingrY rZ }r[ (hUh jU ubah.hubhKX (do nothing) and r\ r] }r^ (hX (do nothing) and h jD ubh)r_ }r` (hX``exit``h0}ra (h4]h5]h3]h2]h6]uh jD h;]rb hKXexitrc rd }re (hUh j_ ubah.hubhKX= (finish program -- ensures that no error can be overlooked).rf rg }rh (hX= (finish program -- ensures that no error can be overlooked).h jD ubeubah.j ubeubjg )ri }rj (hXpseudo_random_seed Some fitting methods and functions, such as ``randnormal`` in data expressions use a pseudo-random number generator. In some situations one may want to have repeatable and predictable results of the fitting, e.g. to make a presentation. Seed for a new sequence of pseudo-random numbers can be set using the option :option:`pseudo_random_seed`. If it is set to 0, the seed is based on the current time and a sequence of pseudo-random numbers is different each time. h j h'h(h.jj h0}rk (h4]h5]h3]h2]h6]uh9Mh:hh;]rl (jm )rm }rn (hXpseudo_random_seedro h ji h'h(h.jq h0}rp (h4]h5]h3]h2]h6]uh9Mh;]rq hKXpseudo_random_seedrr rs }rt (hjo h jm ubaubjw )ru }rv (hUh0}rw (h4]h5]h3]h2]h6]uh ji h;]rx hd)ry }rz (hXSome fitting methods and functions, such as ``randnormal`` in data expressions use a pseudo-random number generator. In some situations one may want to have repeatable and predictable results of the fitting, e.g. to make a presentation. Seed for a new sequence of pseudo-random numbers can be set using the option :option:`pseudo_random_seed`. If it is set to 0, the seed is based on the current time and a sequence of pseudo-random numbers is different each time.h ju h'h(h.hhh0}r{ (h4]h5]h3]h2]h6]uh9Kh;]r| (hKX,Some fitting methods and functions, such as r} r~ }r (hX,Some fitting methods and functions, such as h jy ubh)r }r (hX``randnormal``h0}r (h4]h5]h3]h2]h6]uh jy h;]r hKX randnormalr r }r (hUh j ubah.hubhKX in data expressions use a pseudo-random number generator. In some situations one may want to have repeatable and predictable results of the fitting, e.g. to make a presentation. Seed for a new sequence of pseudo-random numbers can be set using the option r r }r (hX in data expressions use a pseudo-random number generator. In some situations one may want to have repeatable and predictable results of the fitting, e.g. to make a presentation. Seed for a new sequence of pseudo-random numbers can be set using the option h jy ubj)r }r (hX:option:`pseudo_random_seed`r h jy h'h(h.jh0}r (UreftypeXoptionjjXpseudo_random_seedU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjjNuh9Kh;]r h)r }r (hj h0}r (h4]h5]r (jj X std-optionr eh3]h2]h6]uh j h;]r hKXpseudo_random_seedr r }r (hUh j ubah.hubaubhKX{. If it is set to 0, the seed is based on the current time and a sequence of pseudo-random numbers is different each time.r r }r (hX{. If it is set to 0, the seed is based on the current time and a sequence of pseudo-random numbers is different each time.h jy ubeubah.j ubeubjg )r }r (hXCrefresh_period During time-consuming computations (like fitting) user interface can remain not changed for this time (in seconds). This option was introduced, because on one hand frequent refreshing of the program's window notably slows down fitting, and on the other hand irresponsive program is a frustrating experience. h j h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9M h:hh;]r (jm )r }r (hXrefresh_periodr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9M h;]r hKXrefresh_periodr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hX3During time-consuming computations (like fitting) user interface can remain not changed for this time (in seconds). This option was introduced, because on one hand frequent refreshing of the program's window notably slows down fitting, and on the other hand irresponsive program is a frustrating experience.r h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Mh;]r hKX3During time-consuming computations (like fitting) user interface can remain not changed for this time (in seconds). This option was introduced, because on one hand frequent refreshing of the program's window notably slows down fitting, and on the other hand irresponsive program is a frustrating experience.r r }r (hj h j ubaubah.j ubeubjg )r }r (hXSverbosity Possible values: -1 (silent), 0 (normal), 1 (verbose), 2 (very verbose). h j h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Mh:hh;]r (jm )r }r (hX verbosityr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Mh;]r hKX verbosityr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hXHPossible values: -1 (silent), 0 (normal), 1 (verbose), 2 (very verbose).r h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Mh;]r hKXHPossible values: -1 (silent), 0 (normal), 1 (verbose), 2 (very verbose).r r }r (hj h j ubaubah.j ubeubjg )r }r (hX#width_correction See :ref:`guess`. h j h'h(h.jj h0}r (h4]h5]h3]h2]h6]uh9Mh:hh;]r (jm )r }r (hXwidth_correctionr h j h'h(h.jq h0}r (h4]h5]h3]h2]h6]uh9Mh;]r hKXwidth_correctionr r }r (hj h j ubaubjw )r }r (hUh0}r (h4]h5]h3]h2]h6]uh j h;]r hd)r }r (hXSee :ref:`guess`.h j h'h(h.hhh0}r (h4]h5]h3]h2]h6]uh9Mh;]r (hKXSee r r }r (hXSee h j ubj)r }r (hX :ref:`guess`r h j h'h(h.jh0}r (UreftypeXrefjjXguessU refdomainXstdr h2]h3]U refexplicith4]h5]h6]jjuh9Mh;]r j)r }r (hj h0}r (h4]h5]r (jj Xstd-refr eh3]h2]h6]uh j h;]r hKXguessr r }r (hUh j ubah.jubaubhKX.r }r (hX.h j ubeubah.j ubeubeubeubh'h(h.Usystem_messager h0}r (h4]UlevelKh2]h3]r j aUsourceh(h5]h6]UlineKUtypeUINFOr uh9Kh:hh;]r hd)r }r (hUh0}r (h4]h5]h3]h2]h6]uh hh;]r hKX+Duplicate implicit target name: "settings".r r }r (hUh j ubah.hhubaubh)r}r(hUh jh'h(h.j h0}r(h4]UlevelKh2]h3]rjaUsourceh(h5]h6]UlineMMUtypej uh9MMh:hh;]rhd)r}r(hUh0}r(h4]h5]h3]h2]h6]uh jh;]rhKX'Duplicate implicit target name: "info".r r }r (hUh jubah.hhubaubeUcurrent_sourcer NU decorationr NUautofootnote_startrKUnameidsr}r(hjhjhjh hRh j0 h j~h j h j hjhj~hjhhXhjhjhj hh8hjhh?uh;]r(h,h%ehUU transformerrNU footnote_refsr}rUrefnamesr}r(j]rj}aX class fityk]rjoaj]rjauUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr ]r!h:hU current_liner"NUtransform_messagesr#]r$(h)r%}r&(hUh0}r'(h4]UlevelKh2]h3]Usourceh(h5]h6]UlineKUtypej uh;]r(hd)r)}r*(hUh0}r+(h4]h5]h3]h2]h6]uh j%h;]r,hKX)Hyperlink target "ref" is not referenced.r-r.}r/(hUh j)ubah.hhubah.j ubh)r0}r1(hUh0}r2(h4]UlevelKh2]h3]Usourceh(h5]h6]UlineKUtypej uh;]r3hd)r4}r5(hUh0}r6(h4]h5]h3]h2]h6]uh j0h;]r7hKX.Hyperlink target "settings" is not referenced.r8r9}r:(hUh j4ubah.hhubah.j ubh)r;}r<(hUh0}r=(h4]UlevelKh2]h3]Usourceh(h5]h6]UlineKUtypej uh;]r>hd)r?}r@(hUh0}rA(h4]h5]h3]h2]h6]uh j;h;]rBhKX-Hyperlink target "epsilon" is not referenced.rCrD}rE(hUh j?ubah.hhubah.j ubh)rF}rG(hUh0}rH(h4]UlevelKh2]h3]Usourceh(h5]h6]UlineKUtypej uh;]rIhd)rJ}rK(hUh0}rL(h4]h5]h3]h2]h6]uh jFh;]rMhKX4Hyperlink target "numeric-format" is not referenced.rNrO}rP(hUh jJubah.hhubah.j ubh)rQ}rR(hUh0}rS(h4]UlevelKh2]h3]Usourceh(h5]h6]UlineM,Utypej uh;]rThd)rU}rV(hUh0}rW(h4]h5]h3]h2]h6]uh jQh;]rXhKX.Hyperlink target "autoplot" is not referenced.rYrZ}r[(hUh jUubah.hhubah.j ubh)r\}r](hUh0}r^(h4]UlevelKh2]h3]Usourceh(h5]h6]UlineM4Utypej uh;]r_hd)r`}ra(hUh0}rb(h4]h5]h3]h2]h6]uh j\h;]rchKX*Hyperlink target "info" is not referenced.rdre}rf(hUh j`ubah.hhubah.j ubh)rg}rh(hUh0}ri(h4]UlevelKh2]h3]Usourceh(h5]h6]UlineMUtypej uh;]rjhd)rk}rl(hUh0}rm(h4]h5]h3]h2]h6]uh jgh;]rnhKX.Hyperlink target "invoking" is not referenced.rorp}rq(hUh jkubah.hhubah.j ubeUreporterrrNUid_startrsKU autofootnotesrt]ruU citation_refsrv}rwUindirect_targetsrx]ryUsettingsrz(cdocutils.frontend Values r{or|}r}(Ufootnote_backlinksr~KUrecord_dependenciesrNU rfc_base_urlrUhttps://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhHNUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrUutf-8rU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUasciirU_sourcerh(Ugettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrU https://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(jjjjh?h%j j j j hRhSjjjj jjjjj0 j1 j h"jjj~jzhXhSjjj j h8h%jjj~jzuUsubstitution_namesr}rh.h:h0}r(h4]h2]h3]Usourceh(h5]h6]uU footnotesr]rUrefidsr}r(j]rjaj]rjaj ]rj ahR]rhOaj0 ]rj- aj ]rj ah8]rh,auub.PKFMIl<<$fityk-v1.2.1/.doctrees/intro.doctreecdocutils.nodes document q)q}q(U nametypesq}q(XgplqXgithubqX wxwidgetsqX introductionq NXmpfitq Xintroq Xwhat's this program for?q NX gui vs cliq NXabout...qNuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUgplqhUgithubqhU wxwidgetsqh U introductionqh Umpfitqh Uintroqh Uwhat-s-this-program-forqh U gui-vs-cliqhUaboutq uUchildrenq!]q"(cdocutils.nodes target q#)q$}q%(U rawsourceq&X .. _intro:Uparentq'hUsourceq(X;/var/build/user_builds/fityk/checkouts/v1.2.1/doc/intro.rstq)Utagnameq*Utargetq+U attributesq,}q-(Uidsq.]Ubackrefsq/]Udupnamesq0]Uclassesq1]Unamesq2]Urefidq3huUlineq4KUdocumentq5hh!]ubcdocutils.nodes section q6)q7}q8(h&Uh'hh(h)Uexpect_referenced_by_nameq9}q:h h$sh*Usectionq;h,}q<(h0]h1]h/]h.]q=(hheh2]q>(h h euh4Kh5hUexpect_referenced_by_idq?}q@hh$sh!]qA(cdocutils.nodes title qB)qC}qD(h&X IntroductionqEh'h7h(h)h*UtitleqFh,}qG(h0]h1]h/]h.]h2]uh4Kh5hh!]qHcdocutils.nodes Text qIX IntroductionqJqK}qL(h&hEh'hCubaubh6)qM}qN(h&Uh'h7h(h)h*h;h,}qO(h0]h1]h/]h.]qPhah2]qQh auh4Kh5hh!]qR(hB)qS}qT(h&XWhat's This Program for?qUh'hMh(h)h*hFh,}qV(h0]h1]h/]h.]h2]uh4Kh5hh!]qWhIXWhat's This Program for?qXqY}qZ(h&hUh'hSubaubcdocutils.nodes paragraph q[)q\}q](h&X Fityk is a program for nonlinear fitting of analytical functions (especially peak-shaped) to data (usually experimental data). The most concise description: peak fitting software. There are also people using it to remove the baseline from data, or to display data only.q^h'hMh(h)h*U paragraphq_h,}q`(h0]h1]h/]h.]h2]uh4K h5hh!]qahIX Fityk is a program for nonlinear fitting of analytical functions (especially peak-shaped) to data (usually experimental data). The most concise description: peak fitting software. There are also people using it to remove the baseline from data, or to display data only.qbqc}qd(h&h^h'h\ubaubh[)qe}qf(h&XJIt is reportedly used in crystallography, chromatography, photoluminescence and photoelectron spectroscopy, infrared and Raman spectroscopy, to name but a few. Although the author has a general understanding only of experimental methods other than powder diffraction, he would like to make it useful to as many people as possible.qgh'hMh(h)h*h_h,}qh(h0]h1]h/]h.]h2]uh4Kh5hh!]qihIXJIt is reportedly used in crystallography, chromatography, photoluminescence and photoelectron spectroscopy, infrared and Raman spectroscopy, to name but a few. Although the author has a general understanding only of experimental methods other than powder diffraction, he would like to make it useful to as many people as possible.qjqk}ql(h&hgh'heubaubh[)qm}qn(h&X"Fityk offers various nonlinear fitting methods, simple background subtraction and other manipulations to the dataset, easy placement of peaks and changing of peak parameters, support for analysis of series of datasets, automation of common tasks with scripts, and much more. The main advantage of the program is flexibility - parameters of peaks can be arbitrarily bound to each other, e.g. the width of a peak can be an independent variable, the same as the width of another peak, or can be given by complex (and general for all peaks) formula.qoh'hMh(h)h*h_h,}qp(h0]h1]h/]h.]h2]uh4Kh5hh!]qqhIX"Fityk offers various nonlinear fitting methods, simple background subtraction and other manipulations to the dataset, easy placement of peaks and changing of peak parameters, support for analysis of series of datasets, automation of common tasks with scripts, and much more. The main advantage of the program is flexibility - parameters of peaks can be arbitrarily bound to each other, e.g. the width of a peak can be an independent variable, the same as the width of another peak, or can be given by complex (and general for all peaks) formula.qrqs}qt(h&hoh'hmubaubeubh6)qu}qv(h&Uh'h7h(h)h*h;h,}qw(h0]h1]h/]h.]qxhah2]qyh auh4Kh5hh!]qz(hB)q{}q|(h&X GUI vs CLIq}h'huh(h)h*hFh,}q~(h0]h1]h/]h.]h2]uh4Kh5hh!]qhIX GUI vs CLIqq}q(h&h}h'h{ubaubh[)q}q(h&XThe program comes in two versions: the GUI (Graphical User Interface) version - more comfortable for most users, and the CLI (Command Line Interface) version (named *cfityk* to differentiate).h'huh(h)h*h_h,}q(h0]h1]h/]h.]h2]uh4K!h5hh!]q(hIXThe program comes in two versions: the GUI (Graphical User Interface) version - more comfortable for most users, and the CLI (Command Line Interface) version (named qq}q(h&XThe program comes in two versions: the GUI (Graphical User Interface) version - more comfortable for most users, and the CLI (Command Line Interface) version (named h'hubcdocutils.nodes emphasis q)q}q(h&X*cfityk*h,}q(h0]h1]h/]h.]h2]uh'hh!]qhIXcfitykqq}q(h&Uh'hubah*UemphasisqubhIX to differentiate).qq}q(h&X to differentiate).h'hubeubcdocutils.nodes admonition q)q}q(h&XThe GUI version is written using the `wxWidgets `_ library. It runs on Unix species with GTK+, on MS Windows and (with some problems) on MacOS X. If the CLI version was compiled with the *GNU Readline Library*, command line editing, ``TAB``-expanding and command history will be available. On Unix, the *gnuplot* program can be used for data visualization.h'huh(h)h*U admonitionqh,}q(h0]h1]qUadmonition-technical-noteqah/]h.]h2]uh4Nh5hh!]q(hB)q}q(h&Xtechnical noteqh'hh(h)h*hFh,}q(h0]h1]h/]h.]h2]uh4K%h!]qhIXtechnical noteqq}q(h&hh'hubaubh[)q}q(h&XThe GUI version is written using the `wxWidgets `_ library. It runs on Unix species with GTK+, on MS Windows and (with some problems) on MacOS X.h'hh(h)h*h_h,}q(h0]h1]h/]h.]h2]uh4K'h!]q(hIX%The GUI version is written using the qq}q(h&X%The GUI version is written using the h'hubcdocutils.nodes reference q)q}q(h&X'`wxWidgets `_h,}q(UnameX wxWidgetsUrefuriqXhttp://www.wxwidgets.orgqh.]h/]h0]h1]h2]uh'hh!]qhIX wxWidgetsqq}q(h&Uh'hubah*U referencequbh#)q}q(h&X U referencedqKh'hh*h+h,}q(Urefurihh.]qhah/]h0]h1]h2]qhauh!]ubhIX_ library. It runs on Unix species with GTK+, on MS Windows and (with some problems) on MacOS X.qq}q(h&X_ library. It runs on Unix species with GTK+, on MS Windows and (with some problems) on MacOS X.h'hubeubh[)q}q(h&XIf the CLI version was compiled with the *GNU Readline Library*, command line editing, ``TAB``-expanding and command history will be available. On Unix, the *gnuplot* program can be used for data visualization.h'hh(h)h*h_h,}q(h0]h1]h/]h.]h2]uh4K,h!]q(hIX)If the CLI version was compiled with the qŅq}q(h&X)If the CLI version was compiled with the h'hubh)q}q(h&X*GNU Readline Library*h,}q(h0]h1]h/]h.]h2]uh'hh!]qhIXGNU Readline Libraryq̅q}q(h&Uh'hubah*hubhIX, command line editing, qυq}q(h&X, command line editing, h'hubcdocutils.nodes literal q)q}q(h&X``TAB``h,}q(h0]h1]h/]h.]h2]uh'hh!]qhIXTABqׅq}q(h&Uh'hubah*UliteralqubhIX?-expanding and command history will be available. On Unix, the qۅq}q(h&X?-expanding and command history will be available. On Unix, the h'hubh)q}q(h&X *gnuplot*h,}q(h0]h1]h/]h.]h2]uh'hh!]qhIXgnuplotq⅁q}q(h&Uh'hubah*hubhIX, program can be used for data visualization.q允q}q(h&X, program can be used for data visualization.h'hubeubeubeubh6)q}q(h&Uh'h7h(h)h*h;h,}q(h0]h1]h/]h.]qh ah2]qhauh4K1h5hh!]q(hB)q}q(h&XAbout...qh'hh(h)h*hFh,}q(h0]h1]h/]h.]h2]uh4K1h5hh!]qhIXAbout...qq}q(h&hh'hubaubh[)q}q(h&XFityk is free software; you can redistribute and modify it under the terms of the `GPL `_, version 2 or (at your option) any later version.h'hh(h)h*h_h,}q(h0]h1]h/]h.]h2]uh4K3h5hh!]q(hIXRFityk is free software; you can redistribute and modify it under the terms of the qq}q(h&XRFityk is free software; you can redistribute and modify it under the terms of the h'hubh)q}q(h&X5`GPL `_h,}q(UnameXGPLhX,http://creativecommons.org/licenses/GPL/2.0/rh.]h/]h0]h1]h2]uh'hh!]rhIXGPLrr}r(h&Uh'hubah*hubh#)r}r(h&X/ hKh'hh*h+h,}r(Urefurijh.]rhah/]h0]h1]h2]r hauh!]ubhIX2, version 2 or (at your option) any later version.r r }r (h&X2, version 2 or (at your option) any later version.h'hubeubh[)r }r(h&XdTo download the latest version of the program or to contact the author visit http://fityk.nieto.pl/.h'hh(h)h*h_h,}r(h0]h1]h/]h.]h2]uh4K7h5hh!]r(hIXMTo download the latest version of the program or to contact the author visit rr}r(h&XMTo download the latest version of the program or to contact the author visit h'j ubh)r}r(h&Xhttp://fityk.nieto.pl/rh,}r(Urefurijh.]h/]h0]h1]h2]uh'j h!]rhIXhttp://fityk.nieto.pl/rr}r(h&Uh'jubah*hubhIX.r}r(h&X.h'j ubeubh[)r}r(h&XThis manual is written in ReStructuredText. All corrections and improvements are welcome. Use the ``Show Source`` link to get the source of the page, edit it and send me either the modified version or a patch.h'hh(h)h*h_h,}r (h0]h1]h/]h.]h2]uh4K:h5hh!]r!(hIXbThis manual is written in ReStructuredText. All corrections and improvements are welcome. Use the r"r#}r$(h&XbThis manual is written in ReStructuredText. All corrections and improvements are welcome. Use the h'jubh)r%}r&(h&X``Show Source``h,}r'(h0]h1]h/]h.]h2]uh'jh!]r(hIX Show Sourcer)r*}r+(h&Uh'j%ubah*hubhIX` link to get the source of the page, edit it and send me either the modified version or a patch.r,r-}r.(h&X` link to get the source of the page, edit it and send me either the modified version or a patch.h'jubeubh[)r/}r0(h&XAlternatively, go to `GitHub `_, open corresponding rst file, press *Fork and edit this file* button, do edits in your web browser and click *Propose file change*.h'hh(h)h*h_h,}r1(h0]h1]h/]h.]h2]uh4K?h5hh!]r2(hIXAlternatively, go to r3r4}r5(h&XAlternatively, go to h'j/ubh)r6}r7(h&X;`GitHub `_h,}r8(UnameXGitHubhX/https://github.com/wojdyr/fityk/tree/master/docr9h.]h/]h0]h1]h2]uh'j/h!]r:hIXGitHubr;r<}r=(h&Uh'j6ubah*hubh#)r>}r?(h&X2 hKh'j/h*h+h,}r@(Urefurij9h.]rAhah/]h0]h1]h2]rBhauh!]ubhIX%, open corresponding rst file, press rCrD}rE(h&X%, open corresponding rst file, press h'j/ubh)rF}rG(h&X*Fork and edit this file*h,}rH(h0]h1]h/]h.]h2]uh'j/h!]rIhIXFork and edit this filerJrK}rL(h&Uh'jFubah*hubhIX0 button, do edits in your web browser and click rMrN}rO(h&X0 button, do edits in your web browser and click h'j/ubh)rP}rQ(h&X*Propose file change*h,}rR(h0]h1]h/]h.]h2]uh'j/h!]rShIXPropose file changerTrU}rV(h&Uh'jPubah*hubhIX.rW}rX(h&X.h'j/ubeubh[)rY}rZ(h&XThe following people have contributed to this manual (in chronological order): Marcin Wojdyr (maintainer), Stan Gierlotka, Jaap Folmer, Michael Richardson.r[h'hh(h)h*h_h,}r\(h0]h1]h/]h.]h2]uh4KEh5hh!]r]hIXThe following people have contributed to this manual (in chronological order): Marcin Wojdyr (maintainer), Stan Gierlotka, Jaap Folmer, Michael Richardson.r^r_}r`(h&j[h'jYubaubh[)ra}rb(h&XOne of the fitting methods uses MPFIT_ library (MINPACK-1 Least Squares Fitting Library in C), which includes software developed by the University of Chicago, as Operator of Argonne National Laboratory.h'hh(h)h*h_h,}rc(h0]h1]h/]h.]h2]uh4KHh5hh!]rd(hIX One of the fitting methods uses rerf}rg(h&X One of the fitting methods uses h'jaubh)rh}ri(h&XMPFIT_UresolvedrjKh'jah*hh,}rk(UnameXMPFIThX3http://www.physics.wisc.edu/~craigm/idl/cmpfit.htmlrlh.]h/]h0]h1]h2]uh!]rmhIXMPFITrnro}rp(h&Uh'jhubaubhIX library (MINPACK-1 Least Squares Fitting Library in C), which includes software developed by the University of Chicago, as Operator of Argonne National Laboratory.rqrr}rs(h&X library (MINPACK-1 Least Squares Fitting Library in C), which includes software developed by the University of Chicago, as Operator of Argonne National Laboratory.h'jaubeubh#)rt}ru(h&X>.. _MPFIT: http://www.physics.wisc.edu/~craigm/idl/cmpfit.htmlhKh'hh(h)h*h+h,}rv(hjlh.]rwhah/]h0]h1]h2]rxh auh4KLh5hh!]ubeubeubeh&UU transformerryNU footnote_refsrz}r{Urefnamesr|}r}Xmpfit]r~jhasUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh5hU current_linerNUtransform_messagesr]rcdocutils.nodes system_message r)r}r(h&Uh,}r(h0]UlevelKh.]h/]Usourceh)h1]h2]UlineKUtypeUINFOruh!]rh[)r}r(h&Uh,}r(h0]h1]h/]h.]h2]uh'jh!]rhIX+Hyperlink target "intro" is not referenced.rr}r(h&Uh'jubah*h_ubah*Usystem_messagerubaUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttps://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhFNUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrUutf-8rU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUasciirU_sourcerh)Ugettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrU https://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hjh hhj>hhhjthh7hhuhhMhh7uUsubstitution_namesr}rh*h5h,}r(h0]h.]h/]Usourceh)h1]h2]uU footnotesr]rUrefidsr}rh]rh$asub.PKFѤP~P~)fityk-v1.2.1/.doctrees/environment.pickle(csphinx.environment BuildEnvironment qoq}q(Udlfilesqcsphinx.util FilenameUniqDict q)qc__builtin__ set q]RqbUappq NU _warnfuncq NUtitlesq }q (X fityk-manualq cdocutils.nodes title q)q}q(U rawsourceqUU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]Unamesq]uUchildrenq]q(cdocutils.nodes Text qXFityk qq}q(hXFityk qUparentq hubhX1.2.1q!q"}q#(hU1.2.1q$h hubhX - User's Manualq%q&}q'(hX - User's Manualq(h hubeUtagnameq)Utitleq*ubX getstartedq+h)q,}q-(hUh}q.(h]h]h]h]h]uh]q/hXGetting Startedq0q1}q2(hXGetting Startedq3h h,ubah)h*ubXlangq4h)q5}q6(hUh}q7(h]h]h]h]h]uh]q8hX Mini-Languageq9q:}q;(hX Mini-Languageq}q?(hUh}q@(h]h]h]h]h]uh]qAhX Curve FittingqBqC}qD(hX Curve FittingqEh h>ubah)h*ubXrefqFh)qG}qH(hUh}qI(h]h]h]h]h]uh]qJhX All the RestqKqL}qM(hX All the RestqNh hGubah)h*ubXintroqOh)qP}qQ(hUh}qR(h]h]h]h]h]uh]qShX IntroductionqTqU}qV(hX IntroductionqWh hPubah)h*ubXmodelqXh)qY}qZ(hUh}q[(h]h]h]h]h]uh]q\hXModelsq]q^}q_(hXModelsq`h hYubah)h*ubXdataqah)qb}qc(hUh}qd(h]h]h]h]h]uh]qehXDataqfqg}qh(hXDataqih hbubah)h*ubuU domaindataqj}qk(Ustdql}qm(UversionqnKU anonlabelsqo}qp(XautoplotqqhFUautoplotqrXdomainqshXUdomainqtX activepointsquhaU activepointsqvX model_formulaqwhXU model-formulaqxUmodindexqyU py-modindexUX variablesqzhXU variablesq{Xintroq|hOUintroq}Xfunction_cutoffq~hXUfunction-cutoffqXguessqhXUguessqX nonlinearqh=U nonlinearqXnelderqh=UnelderqXfitqh=UfitqXinvokingqhFUinvokingqX transformqhaU transformqX multidataqhaU multidataqXnumeric_formatqhFUnumeric-formatqXrefqhFUrefqX datasettrqhaU datasettrqXinfoqhFUinfoqUgenindexqhUXepsilonqhFUepsilonqXfuncindtqhaUfuncindtqXflistqhXUflistqXdataloadqhaUdataloadqXdataqhaUdataqXlangqh4UlangqX getstartedqh+U getstartedqUsearchqUsearchUX fitting_cmdqh=U fitting-cmdqXsettingsqhFUsettingsqXdexportqhaUdexportqXlevmarqh=UlevmarqXweightsqhaUweightsqXudfqhXUudfqXmodelqhXUmodelquUlabelsq}q(huhahvXActive and Inactive PointshyU py-modindexUcsphinx.locale _TranslationProxy qcsphinx.locale mygettext qU Module IndexqqhhqbhzhXh{X Variablesh|hOh}X Introductionh~hXhXCutoffhhXhXGuessing Initial Parametershh=hXNonlinear Optimizationhh=hXNelder-Mead Downhill Simplexhh=hX Curve FittinghhFhXStarting fityk and cfitykhhahXData Point TransformationshhahXWorking with Multiple DatasetshhFhX All the ResthhahXDataset TransformationshhFhXInformation DisplayhhUhhUIndexqqhhqbhhahX.Functions and Variables in Data TransformationhhXhXBuilt-In FunctionshhahX Loading DatahhahXDatahh4hX Mini-Languagehh+hXGetting StartedhhUhhU Search Pageqqhhqbhh=hXFitting Related CommandshhFhXScriptshhahXExporting Datahh=hXLevenberg-MarquardthhahXStandard Deviation (or Weight)hhXhXUser-Defined Functions (UDF)hhXhXModelsuU progoptionsq}qUobjectsq}q(UtokenqXNonblankStringqƆh4Xgrammar-token-NonblankStringqdžhXNumberqȆh4Xgrammar-token-NumberqɆhX statementqʆh4Xgrammar-token-statementqˆhXarithq̆h4Xgrammar-token-arithq͆hXcomponent_funcqΆh4Xgrammar-token-component_funcqφhXfunc_rhsqІh4Xgrammar-token-func_rhsqцhXfilenameq҆h4Xgrammar-token-filenameqӆhXp_attrqԆh4Xgrammar-token-p_attrqՆhXexpr_orqֆh4Xgrammar-token-expr_orq׆hX param_lhsq؆h4Xgrammar-token-param_lhsqنhXUnameqچh4Xgrammar-token-UnameqۆhXexecq܆h4Xgrammar-token-execq݆hXLnameqކh4Xgrammar-token-Lnameq߆hXinfo_argqh4Xgrammar-token-info_argqhXfactorqh4Xgrammar-token-factorqhXFuncnameqh4Xgrammar-token-FuncnameqhXvalueqh4Xgrammar-token-valueqhXlineqh4Xgrammar-token-lineqhXpowerqh4Xgrammar-token-powerqhX delete_pointsqh4Xgrammar-token-delete_pointsqhXrangeqh4Xgrammar-token-rangeqhXdefineqh4Xgrammar-token-defineqhXfunc_idqh4Xgrammar-token-func_idqhXmodel_idqh4Xgrammar-token-model_idqhXatomqh4Xgrammar-token-atomqhX with_optsqh4Xgrammar-token-with_optsqhXredirqh4Xgrammar-token-redirqhXguessqh4Xgrammar-token-guessqhXDatasetqh4Xgrammar-token-DatasetqhX print_argsrh4Xgrammar-token-print_argsrhXfitrh4Xgrammar-token-fitrhXtermrh4Xgrammar-token-termrhXVarnamerh4Xgrammar-token-VarnamerhX RestOfLinerh4Xgrammar-token-RestOfLiner hXvar_idr h4Xgrammar-token-var_idr hX comparisonr h4Xgrammar-token-comparisonr hXcommentrh4Xgrammar-token-commentrhX braced_exprrh4Xgrammar-token-braced_exprrhX math_funcrh4Xgrammar-token-math_funcrhX QuotedStringrh4Xgrammar-token-QuotedStringrhX model_rhsrh4Xgrammar-token-model_rhsrhXexpr_andrh4Xgrammar-token-expr_andrhXexprrh4Xgrammar-token-exprrhXdeleterh4Xgrammar-token-deleterhXexpr_notrh4Xgrammar-token-expr_notrhXcommandr h4Xgrammar-token-commandr!hXload_argr"h4Xgrammar-token-load_argr#uuUc}r$(h}r%hnKuUpyr&}r'(h}r(Umodulesr)}r*hnKuUjsr+}r,(h}r-hnKuUrstr.}r/(h}r0hnKuUcppr1}r2(h}r3hnKuuU glob_toctreesr4h]Rr5U reread_alwaysr6h]Rr7U doctreedirr8XM/var/build/user_builds/fityk/checkouts/v1.2.1/doc/_build/localmedia/.doctreesr9Uversioning_conditionr:Utoc_fignumbersr;}U citationsr<}hnK.Usrcdirr=X1/var/build/user_builds/fityk/checkouts/v1.2.1/docr>Uconfigr?csphinx.config Config r@)rA}rB(U latex_logorCUfityk-banner.pdfUsource_parsersrD}rEU.mdrFcrecommonmark.parser CommonMarkParser rGsUhtml_last_updated_fmtrHU%Y-%m-%dU html_sidebarsrI}rJ(Uscreens]UindexrK]U**]rL(Uglobaltoc.htmlrMUsourcelink.htmlrNUsearchbox.htmlrOeuUpygments_stylerPUtracrQUhtml_use_smartypantsrRUtemplate_bridgerSUfityk_ext.MyTemplateLoaderU html_themerTU sphinxdocrUU copyrightrVU2001-2012, Fityk DevelopersU master_docrWU fityk-manualrXU html_titlerYUFityk 1.2.1 manualU source_suffixrZ]r[(U.rstr\jFeU default_roler]NUsource_encodingr^Uutf-8r_Uexclude_patternsr`]ra(UhtmlrbUlatexrcU index.rstrdU screens.rstreeUlatex_elementsrf}rg(U papersizerhUa4paperriUinputencrjU@ \usepackage{ucs} \usepackage[utf8x]{inputenc}UpreamblerkT \usepackage{ifthen} \definecolor{gray03}{gray}{0.3} \let\origbeginnotice\notice \let\origendnotice\endnotice \renewenvironment{notice}[2]{% \def\noticetype{#1} \def\inTheGui{\equal{#2}{In the GUI}} \ifthenelse{\equal{#1}{note}}{% \setlength{\fboxrule}{1pt} \setlength{\fboxsep}{6pt} \setlength{\mylen}{\linewidth} \addtolength{\mylen}{-2\fboxsep} \addtolength{\mylen}{-4\fboxrule} %\setlength{\shadowsize}{3pt} \Sbox \minipage{\mylen} \ifthenelse{\inTheGui}{\color{gray03}}{} \par\strong{#2} }{% \origbeginnotice{#1}{#2}% } }{% \ifthenelse{\equal{\noticetype}{note}}{% \endminipage \endSbox \ifthenelse{\inTheGui}{\ovalbox{\TheSbox}}{\fbox{\TheSbox}} }{% \origendnotice% } } U utf8extrarlUU pointsizermU10pt,oneside,openanyuhnh$Uhtml_show_copyrightrnUlatex_show_urlsroU html_contextrp}rq(Ubitbucket_versionUv1.2.1rrU using_themeUuser_analytics_codeUjTjUUcurrent_versionrsjrU canonical_urlUUglobal_analytics_codeU UA-17997319-1jZj\UPRODUCTION_DOMAINUreadthedocs.orgU github_userUwojdyrU new_themeUanalytics_codeUUsingle_versionUdisplay_githubU downloads]rt(UpdfU6//readthedocs.org/projects/fityk/downloads/pdf/v1.2.1/ruUhtmlzipU://readthedocs.org/projects/fityk/downloads/htmlzip/v1.2.1/rvUepubU7//readthedocs.org/projects/fityk/downloads/epub/v1.2.1/rweU READTHEDOCSU conf_py_pathU/doc/U github_repoUfitykrxU rtd_languageXenUbitbucket_repoUNoneryUslugrzjxUapi_hostr{Uhttps://readthedocs.orgUbitbucket_userjyUnamer|XfitykUversions]r}(UlatestU /en/latest/r~Uv1.3.0U /en/v1.3.0/rjrU /en/v1.2.1/rUv1.1.1U /en/v1.1.1/rUv1.0.2U /en/v1.0.2/reUgithub_versionjrUdisplay_bitbucketUcommitrU(1b4e2e72f91658d2a117d3f4633a1448257c7569U MEDIA_URLrU!https://cdnmedia.readthedocs.org/uUtemplates_pathr]r(UA/home/docs/checkouts/readthedocs.org/readthedocs/templates/sphinxrU.eUlatex_documentsr]r(jXUfityk-manual.texU Fityk manualUUmanualrtraU html_faviconrU fityk.icoUextlinksr}r(UwikirU'https://github.com/wojdyr/fityk/wiki/%srUUdownloadrU/http://fityk.nieto.pl/subscribers/fityk-1.2.1%srU fityk-1.2.1ruUhighlight_languagerjxUhtml_static_pathr]r(Ufityk-banner.pngrU fityk.cssrUimg/mouse16.pngrUI/home/docs/checkouts/readthedocs.org/readthedocs/templates/sphinx/_staticreUhtml_theme_pathr]r(U_themesrjeU html_stylerjUpngmath_use_previewrUlanguagerXenrUhtml_additional_pagesr}rjKU_build/html/fityk-manual.htmlsU overridesr}rjjsUhtml_use_indexrUhtml_use_modindexrUprojectrUFitykUhtml_short_titlerUManualU extensionsr]r(Usphinx.ext.pngmathrUsphinx.ext.extlinksrU fityk_extrUreadthedocs_ext.readthedocsrU alabasterreUreleaserh$UsetuprNUhtml_add_permalinksrubUmetadatar}r(h }h+}h4}h=}hF}hO}hX}ha}uUversionchangesr}Utoc_num_entriesr}r(h Kh+Kh4Kh=KhFK hOKhXK haK uUimagesrh)r(Ximg/fityk-with-tooltip.pngrh]rh+aRrXfityk-with-tooltip.pngrrXimg/eq_shape_icon.pngrh]rhXaRrXeq_shape_icon.pngrrXimg/load_data_icon.pngrh]r(h+haeRrXload_data_icon.pngrrXimg/mode_bg_icon.pngrh]rhaaRrXmode_bg_icon.pngrrXimg/add_peak_icon.pngrh]r(h+hXeRrXadd_peak_icon.pngrrXimg/open_lock_icon.pngrh]rhXaRrXopen_lock_icon.pngrrXimg/mode_range_icon.pngrh]r(h+haeRrXmode_range_icon.pngrrXimg/strip_bg_icon.pngrh]rhaaRrXstrip_bg_icon.pngrrXimg/copyfunc_icon.pngrh]rhXaRrXcopyfunc_icon.pngrrXimg/mode_add_icon.pngrh]r(h+hXeRrXmode_add_icon.pngrrXimg/zoom_all.pngrh]rh+aRrX zoom_all.pngrrXimg/fit_icon.pngrh]rh+aRrX fit_icon.pngrrXimg/eq_fwhm_icon.pngrh]rhXaRrXeq_fwhm_icon.pngrrXimg/lock_icon.pngrh]rhXaRrX lock_icon.pngrruh]r(jjjjjjjjjjjjjjeRrbUnumbered_toctreesrh]RrU found_docsrh]r(h4h h=h+hFhOhXhaeRrU longtitlesr}r (h h)r }r (hUh}r (h]h]h]h]h]uh]r hXContentsrr}r(hUh j ubah)h*ubh+h,h4h5h=h>hFhGhOhPhXhYhahbuU dependenciesr}r(h+h]r(jXimg/load_data_icon.pngrjXimg/mode_range_icon.pngrjjjeRrhXh]r(jXimg/add_peak_icon.pngrjjXimg/mode_add_icon.pngrjjeRrhah]r(jjjjeRruUtoctree_includesr}rh ]r(Xintror X getstartedr!Xlangr"Xdatar#Xmodelr$Xfitr%Xrefr&esU temp_datar'}Utocsr(}r)(h cdocutils.nodes bullet_list r*)r+}r,(hUh}r-(h]h]h]h]h]uh]r.cdocutils.nodes list_item r/)r0}r1(hUh}r2(h]h]h]h]h]uh j+h]r3(csphinx.addnodes compact_paragraph r4)r5}r6(hUh}r7(h]h]h]h]h]uh j0h]r8cdocutils.nodes reference r9)r:}r;(hUh}r<(U anchornameUUrefurih h]h]h]h]h]Uinternaluh j5h]r=(hXFityk r>r?}r@(hhh j:ubhX1.2.1rArB}rC(hh$h j:ubhX - User's ManualrDrE}rF(hh(h j:ubeh)U referencerGubah)Ucompact_paragraphrHubj*)rI}rJ(hUh}rK(h]h]h]h]h]uh j0h]rLcsphinx.addnodes toctree rM)rN}rO(hUh}rP(UnumberedKUparenth U titlesonlyUmaxdepthKUglobh]h]h]h]h]Uentries]rQ(Nj rRNj!rSNj"rTNj#rUNj$rVNj%rWNj&rXeUhiddenUcaptionNU includefiles]rY(j j!j"j#j$j%j&eU includehiddenuh jIh]h)UtoctreerZubah)U bullet_listr[ubeh)U list_itemr\ubah)j[ubh+j*)r]}r^(hUh}r_(h]h]h]h]h]uh]r`j/)ra}rb(hUh}rc(h]h]h]h]h]uh j]h]rd(j4)re}rf(hUh}rg(h]h]h]h]h]uh jah]rhj9)ri}rj(hUh}rk(U anchornameUUrefurih+h]h]h]h]h]Uinternaluh jeh]rlhXGetting Startedrmrn}ro(hh3h jiubah)jGubah)jHubj*)rp}rq(hUh}rr(h]h]h]h]h]uh jah]rs(j/)rt}ru(hUh}rv(h]h]h]h]h]uh jph]rwj4)rx}ry(hUh}rz(h]h]h]h]h]uh jth]r{j9)r|}r}(hUh}r~(U anchornameU#graphical-interfaceUrefurih+h]h]h]h]h]Uinternaluh jxh]rhXGraphical Interfacerr}r(hXGraphical Interfacerh j|ubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jph]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#minimal-exampleUrefurih+h]h]h]h]h]Uinternaluh jh]rhXMinimal Examplerr}r(hXMinimal Examplerh jubah)jGubah)jHubah)j\ubeh)j[ubeh)j\ubah)j[ubh4j*)r}r(hUh}r(h]h]h]h]h]uh]rj/)r}r(hUh}r(h]h]h]h]h]uh jh]r(j4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameUUrefurih4h]h]h]h]h]Uinternaluh jh]rhX Mini-Languagerr}r(hh}r?(hUh}r@(U anchornameUUrefurihFh]h]h]h]h]Uinternaluh j:h]rAhX All the RestrBrC}rD(hhNh j>ubah)jGubah)jHubj*)rE}rF(hUh}rG(h]h]h]h]h]uh j6h]rH(j/)rI}rJ(hUh}rK(h]h]h]h]h]uh jEh]rLj4)rM}rN(hUh}rO(h]h]h]h]h]uh jIh]rPj9)rQ}rR(hUh}rS(U anchornameU#scriptsUrefurihFh]h]h]h]h]Uinternaluh jMh]rThXScriptsrUrV}rW(hXScriptsrXh jQubah)jGubah)jHubah)j\ubj/)rY}rZ(hUh}r[(h]h]h]h]h]uh jEh]r\j4)r]}r^(hUh}r_(h]h]h]h]h]uh jYh]r`j9)ra}rb(hUh}rc(U anchornameU#id1UrefurihFh]h]h]h]h]Uinternaluh j]h]rdhXSettingsrerf}rg(hXSettingsrhh jaubah)jGubah)jHubah)j\ubj/)ri}rj(hUh}rk(h]h]h]h]h]uh jEh]rlj4)rm}rn(hUh}ro(h]h]h]h]h]uh jih]rpj9)rq}rr(hUh}rs(U anchornameU #data-viewUrefurihFh]h]h]h]h]Uinternaluh jmh]rthX Data Viewrurv}rw(hX Data Viewrxh jqubah)jGubah)jHubah)j\ubj/)ry}rz(hUh}r{(h]h]h]h]h]uh jEh]r|(j4)r}}r~(hUh}r(h]h]h]h]h]uh jyh]rj9)r}r(hUh}r(U anchornameU#information-displayUrefurihFh]h]h]h]h]Uinternaluh j}h]rhXInformation Displayrr}r(hXInformation Displayrh jubah)jGubah)jHubj*)r}r(hUh}r(h]h]h]h]h]uh jyh]r(j/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#id2UrefurihFh]h]h]h]h]Uinternaluh jh]rhXinforr}r(hXinforh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#printUrefurihFh]h]h]h]h]Uinternaluh jh]rhXprintrr}r(hXprintrh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#debugUrefurihFh]h]h]h]h]Uinternaluh jh]rhXdebugrr}r(hXdebugrh jubah)jGubah)jHubah)j\ubeh)j[ubeh)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jEh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#other-commandsUrefurihFh]h]h]h]h]Uinternaluh jh]rhXOther Commandsrr}r(hXOther Commandsrh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jEh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#starting-fityk-and-cfitykUrefurihFh]h]h]h]h]Uinternaluh jh]rhXStarting fityk and cfitykrr}r(hXStarting fityk and cfitykrh jubah)jGubah)jHubah)j\ubeh)j[ubeh)j\ubah)j[ubhOj*)r}r(hUh}r(h]h]h]h]h]uh]rj/)r}r(hUh}r(h]h]h]h]h]uh jh]r(j4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameUUrefurihOh]h]h]h]h]Uinternaluh jh]rhX Introductionrr}r(hhWh jubah)jGubah)jHubj*)r}r(hUh}r(h]h]h]h]h]uh jh]r(j/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#what-s-this-program-forUrefurihOh]h]h]h]h]Uinternaluh jh]rhXWhat's This Program for?rr}r(hXWhat's This Program for?rh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r (hUh}r (h]h]h]h]h]uh jh]r j9)r }r (hUh}r(U anchornameU #gui-vs-cliUrefurihOh]h]h]h]h]Uinternaluh jh]rhX GUI vs CLIrr}r(hX GUI vs CLIrh j ubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#aboutUrefurihOh]h]h]h]h]Uinternaluh jh]rhXAbout...r r!}r"(hXAbout...r#h jubah)jGubah)jHubah)j\ubeh)j[ubeh)j\ubah)j[ubhXj*)r$}r%(hUh}r&(h]h]h]h]h]uh]r'j/)r(}r)(hUh}r*(h]h]h]h]h]uh j$h]r+(j4)r,}r-(hUh}r.(h]h]h]h]h]uh j(h]r/j9)r0}r1(hUh}r2(U anchornameUUrefurihXh]h]h]h]h]Uinternaluh j,h]r3hXModelsr4r5}r6(hh`h j0ubah)jGubah)jHubj*)r7}r8(hUh}r9(h]h]h]h]h]uh j(h]r:(j/)r;}r<(hUh}r=(h]h]h]h]h]uh j7h]r>j4)r?}r@(hUh}rA(h]h]h]h]h]uh j;h]rBj9)rC}rD(hUh}rE(U anchornameU #variablesUrefurihXh]h]h]h]h]Uinternaluh j?h]rFhX VariablesrGrH}rI(hX VariablesrJh jCubah)jGubah)jHubah)j\ubj/)rK}rL(hUh}rM(h]h]h]h]h]uh j7h]rNj4)rO}rP(hUh}rQ(h]h]h]h]h]uh jKh]rRj9)rS}rT(hUh}rU(U anchornameU#function-types-and-functionsUrefurihXh]h]h]h]h]Uinternaluh jOh]rVhXFunction Types and FunctionsrWrX}rY(hXFunction Types and FunctionsrZh jSubah)jGubah)jHubah)j\ubj/)r[}r\(hUh}r](h]h]h]h]h]uh j7h]r^j4)r_}r`(hUh}ra(h]h]h]h]h]uh j[h]rbj9)rc}rd(hUh}re(U anchornameU#built-in-functionsUrefurihXh]h]h]h]h]Uinternaluh j_h]rfhXBuilt-In Functionsrgrh}ri(hXBuilt-In Functionsrjh jcubah)jGubah)jHubah)j\ubj/)rk}rl(hUh}rm(h]h]h]h]h]uh j7h]rnj4)ro}rp(hUh}rq(h]h]h]h]h]uh jkh]rrj9)rs}rt(hUh}ru(U anchornameU#variadic-functionsUrefurihXh]h]h]h]h]Uinternaluh joh]rvhXVariadic Functionsrwrx}ry(hXVariadic Functionsrzh jsubah)jGubah)jHubah)j\ubj/)r{}r|(hUh}r}(h]h]h]h]h]uh j7h]r~j4)r}r(hUh}r(h]h]h]h]h]uh j{h]rj9)r}r(hUh}r(U anchornameU#user-defined-functions-udfUrefurihXh]h]h]h]h]Uinternaluh jh]rhXUser-Defined Functions (UDF)rr}r(hXUser-Defined Functions (UDF)rh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh j7h]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#cutoffUrefurihXh]h]h]h]h]Uinternaluh jh]rhXCutoffrr}r(hXCutoffrh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh j7h]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#model-f-and-zUrefurihXh]h]h]h]h]Uinternaluh jh]rhXModel, F and Zrr}r(hXModel, F and Zrh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh j7h]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#guessing-initial-parametersUrefurihXh]h]h]h]h]Uinternaluh jh]rhXGuessing Initial Parametersrr}r(hXGuessing Initial Parametersrh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh j7h]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#displaying-informationUrefurihXh]h]h]h]h]Uinternaluh jh]rhXDisplaying Informationrr}r(hXDisplaying Informationrh jubah)jGubah)jHubah)j\ubeh)j[ubeh)j\ubah)j[ubhaj*)r}r(hUh}r(h]h]h]h]h]uh]rj/)r}r(hUh}r(h]h]h]h]h]uh jh]r(j4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameUUrefurihah]h]h]h]h]Uinternaluh jh]rhXDatarr}r(hhih jubah)jGubah)jHubj*)r}r(hUh}r(h]h]h]h]h]uh jh]r(j/)r}r(hUh}r(h]h]h]h]h]uh jh]r(j4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU #loading-dataUrefurihah]h]h]h]h]Uinternaluh jh]rhX Loading Datarr}r(hX Loading Datarh jubah)jGubah)jHubj*)r}r(hUh}r(h]h]h]h]h]uh jh]r(j/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#supported-filetypesUrefurihah]h]h]h]h]Uinternaluh jh]rhXSupported Filetypesrr}r(hXSupported Filetypesrh jubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jh]r j4)r }r (hUh}r (h]h]h]h]h]uh jh]r j9)r}r(hUh}r(U anchornameU#reading-text-filesUrefurihah]h]h]h]h]Uinternaluh j h]rhXReading Text Filesrr}r(hXReading Text Filesrh jubah)jGubah)jHubah)j\ubeh)j[ubeh)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r (U anchornameU#active-and-inactive-pointsUrefurihah]h]h]h]h]Uinternaluh jh]r!hXActive and Inactive Pointsr"r#}r$(hXActive and Inactive Pointsr%h jubah)jGubah)jHubah)j\ubj/)r&}r'(hUh}r((h]h]h]h]h]uh jh]r)j4)r*}r+(hUh}r,(h]h]h]h]h]uh j&h]r-j9)r.}r/(hUh}r0(U anchornameU#standard-deviation-or-weightUrefurihah]h]h]h]h]Uinternaluh j*h]r1hXStandard Deviation (or Weight)r2r3}r4(hXStandard Deviation (or Weight)r5h j.ubah)jGubah)jHubah)j\ubj/)r6}r7(hUh}r8(h]h]h]h]h]uh jh]r9j4)r:}r;(hUh}r<(h]h]h]h]h]uh j6h]r=j9)r>}r?(hUh}r@(U anchornameU#data-point-transformationsUrefurihah]h]h]h]h]Uinternaluh j:h]rAhXData Point TransformationsrBrC}rD(hXData Point TransformationsrEh j>ubah)jGubah)jHubah)j\ubj/)rF}rG(hUh}rH(h]h]h]h]h]uh jh]rIj4)rJ}rK(hUh}rL(h]h]h]h]h]uh jFh]rMj9)rN}rO(hUh}rP(U anchornameU#aggregate-functionsUrefurihah]h]h]h]h]Uinternaluh jJh]rQhXAggregate FunctionsrRrS}rT(hXAggregate FunctionsrUh jNubah)jGubah)jHubah)j\ubj/)rV}rW(hUh}rX(h]h]h]h]h]uh jh]rYj4)rZ}r[(hUh}r\(h]h]h]h]h]uh jVh]r]j9)r^}r_(hUh}r`(U anchornameU/#functions-and-variables-in-data-transformationUrefurihah]h]h]h]h]Uinternaluh jZh]rahX.Functions and Variables in Data Transformationrbrc}rd(hX.Functions and Variables in Data Transformationreh j^ubah)jGubah)jHubah)j\ubj/)rf}rg(hUh}rh(h]h]h]h]h]uh jh]rij4)rj}rk(hUh}rl(h]h]h]h]h]uh jfh]rmj9)rn}ro(hUh}rp(U anchornameU#working-with-multiple-datasetsUrefurihah]h]h]h]h]Uinternaluh jjh]rqhXWorking with Multiple Datasetsrrrs}rt(hXWorking with Multiple Datasetsruh jnubah)jGubah)jHubah)j\ubj/)rv}rw(hUh}rx(h]h]h]h]h]uh jh]ryj4)rz}r{(hUh}r|(h]h]h]h]h]uh jvh]r}j9)r~}r(hUh}r(U anchornameU#dataset-transformationsUrefurihah]h]h]h]h]Uinternaluh jzh]rhXDataset Transformationsrr}r(hXDataset Transformationsrh j~ubah)jGubah)jHubah)j\ubj/)r}r(hUh}r(h]h]h]h]h]uh jh]rj4)r}r(hUh}r(h]h]h]h]h]uh jh]rj9)r}r(hUh}r(U anchornameU#exporting-dataUrefurihah]h]h]h]h]Uinternaluh jh]rhXExporting Datarr}r(hXExporting Datarh jubah)jGubah)jHubah)j\ubeh)j[ubeh)j\ubah)j[ubuU indexentriesr}r(h ]h+]h4]h=]hF]hO]hX]ha]uUall_docsr}r(h GA_Fm7h+GA_Fངh4GA_FCJh=GA_FehFGA_GMChOGA_F9GhXGA_G+7 haGA_FiuUsettingsr}r(Ucloak_email_addressesrUtrim_footnote_reference_spacerU halt_levelrKUsectsubtitle_xformrUembed_stylesheetrU pep_base_urlrU https://www.python.org/dev/peps/rUdoctitle_xformrUwarning_streamrcsphinx.util.nodes WarningStream r)r}r(U_rercre _compile rU+\((DEBUG|INFO|WARNING|ERROR|SEVERE)/[0-4]\)rKRrUwarnfuncrNubUenvrhU rfc_base_urlrUhttps://tools.ietf.org/html/rUfile_insertion_enabledrUgettext_compactrUinput_encodingrj_uU ref_contextr}Ufiles_to_rebuildr}r(j"h]rh aRrj!h]rh aRrj%h]rh aRrj&h]rh aRrj h]rh aRrj$h]rh aRrj#h]rh aRruUtoc_secnumbersr}Uversioning_comparerU_nitpick_ignorerh]Rrub.PKF*텎yy)fityk-v1.2.1/.doctrees/getstarted.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xgetting startedqNX getstartedqXminimal exampleqNXgraphical interfaceq NuUsubstitution_defsq }q (X zoom-all-iconq cdocutils.nodes substitution_definition q )q}q(U rawsourceqXO.. |zoom-all-icon| image:: img/zoom_all.png :alt: Zoom All :class: icon Uparentqcdocutils.nodes section q)q}q(hUhh)q}q(hUhhUsourceqX@/var/build/user_builds/fityk/checkouts/v1.2.1/doc/getstarted.rstqUexpect_referenced_by_nameq}qhcdocutils.nodes target q)q}q(hX.. _getstarted:hhhhUtagnameqUtargetqU attributesq }q!(Uidsq"]Ubackrefsq#]Udupnamesq$]Uclassesq%]Unamesq&]Urefidq'U getstartedq(uUlineq)KUdocumentq*hUchildrenq+]ubshUsectionq,h }q-(h$]h%]h#]h"]q.(Ugetting-startedq/h(eh&]q0(hheuh)Kh*hUexpect_referenced_by_idq1}q2h(hsh+]q3(cdocutils.nodes title q4)q5}q6(hXGetting Startedq7hhhhhUtitleq8h }q9(h$]h%]h#]h"]h&]uh)Kh*hh+]q:cdocutils.nodes Text q;XGetting Startedq(hh7hh5ubaubhh)q?}q@(hUhhhhhh,h }qA(h$]h%]h#]h"]qBUminimal-exampleqCah&]qDhauh)K3h*hh+]qE(h4)qF}qG(hXMinimal ExampleqHhh?hhhh8h }qI(h$]h%]h#]h"]h&]uh)K3h*hh+]qJh;XMinimal ExampleqKqL}qM(hhHhhFubaubcdocutils.nodes paragraph qN)qO}qP(hXLet us analyze a diffraction pattern of NaCl. Our goal is to determine the position of the center of the highest peak. It is needed for calculating the pressure under which the sample was measured, but this later detail in the processing is irrelevent for the time being.qQhh?hhhU paragraphqRh }qS(h$]h%]h#]h"]h&]uh)K5h*hh+]qTh;XLet us analyze a diffraction pattern of NaCl. Our goal is to determine the position of the center of the highest peak. It is needed for calculating the pressure under which the sample was measured, but this later detail in the processing is irrelevent for the time being.qUqV}qW(hhQhhOubaubhN)qX}qY(hXuThe data file used in this example is distributed with the program and can be found in the :file:`samples` directory.hh?hhhhRh }qZ(h$]h%]h#]h"]h&]uh)K:h*hh+]q[(h;X[The data file used in this example is distributed with the program and can be found in the q\q]}q^(hX[The data file used in this example is distributed with the program and can be found in the hhXubcdocutils.nodes literal q_)q`}qa(hUh }qb(h"]h#]h$]h%]qcXfileqdaUrolehdh&]uhhXh+]qeh;Xsamplesqfqg}qh(hXsampleshh`ubahUliteralqiubh;X directory.qjqk}ql(hX directory.hhXubeubhN)qm}qn(hXIFirst load data from file :file:`nacl01.dat`. You can do this by typing::hh?hhhhRh }qo(h$]h%]h#]h"]h&]uh)K=h*hh+]qp(h;XFirst load data from file qqqr}qs(hXFirst load data from file hhmubh_)qt}qu(hUh }qv(h"]h#]h$]h%]qwXfileqxaUrolehxh&]uhhmh+]qyh;X nacl01.datqzq{}q|(hX nacl01.dathhtubahhiubh;X. You can do this by typing:q}q~}q(hX. You can do this by typing:hhmubeubcdocutils.nodes literal_block q)q}q(hX@0 < nacl01.dathh?hhhU literal_blockqh }q(U xml:spaceqUpreserveqh"]h#]h$]h%]h&]uh)K@h*hh+]qh;X@0 < nacl01.datqq}q(hUhhubaubhN)q}q(hXMThe :abbr:`CLI (Command Line Interface)` version of the program is all about typing commands. From time to time it is also handy to type a command in the :abbr:`GUI (Graphical User Interface)`, but usually the GUI provides more intuitive, mouse-driven way to perform the same operation -- it is mentioned in the the grey boxes below.hh?hhhhRh }q(h$]h%]h#]h"]h&]uh)KBh*hh+]q(h;XThe qq}q(hXThe hhubcsphinx.addnodes abbreviation q)q}q(hXCLIh }q(U explanationXCommand Line Interfaceh"]h#]h$]h%]h&]uhhh+]qh;XCLIqq}q(hUhhubahU abbreviationqubh;Xr version of the program is all about typing commands. From time to time it is also handy to type a command in the qq}q(hXr version of the program is all about typing commands. From time to time it is also handy to type a command in the hhubh)q}q(hXGUIh }q(U explanationXGraphical User Interfaceh"]h#]h$]h%]h&]uhhh+]qh;XGUIqq}q(hUhhubahhubh;X, but usually the GUI provides more intuitive, mouse-driven way to perform the same operation -- it is mentioned in the the grey boxes below.qq}q(hX, but usually the GUI provides more intuitive, mouse-driven way to perform the same operation -- it is mentioned in the the grey boxes below.hhubeubcdocutils.nodes admonition q)q}q(hXtselect :menuselection:`Data --> Load File` from the menu (or |load-data-icon| from the toolbar) and choose the file.hh?hhhU admonitionqh }q(h$]h%]qUadmonition-in-the-guiqah#]h"]h&]uh)Nh*hh+]q(h4)q}q(hX In the GUIqhhhhhh8h }q(h$]h%]h#]h"]h&]uh)KHh+]qh;X In the GUIqq}q(hhhhubaubhN)q}q(hXtselect :menuselection:`Data --> Load File` from the menu (or |load-data-icon| from the toolbar) and choose the file.hhhhhhRh }q(h$]h%]h#]h"]h&]uh)KJh+]q(h;Xselect qq}q(hXselect hhubcdocutils.nodes inline q)q}q(hUh }q(UrawtextX#:menuselection:`Data --> Load File`h"]h#]h$]h%]qX menuselectionqah&]uhhh+]qh;XData ‣ Load Fileqƅq}q(hUhhubahUinlinequbh;X from the menu (or qʅq}q(hX from the menu (or hhubcdocutils.nodes image q)q}q(hXAimage:: img/load_data_icon.png :alt: Load Data :class: iconqh }q(UuriXimg/load_data_icon.pngqh"]h#]h$]h%]qUiconqaU candidatesq}qU*hsh&]Ualtcdocutils.nodes reprunicode qX Load Dataq؅q}qbuhhh+]hUimagequbh;X' from the toolbar) and choose the file.q܅q}q(hX' from the toolbar) and choose the file.hhubeubeubh )q}q(hXV.. |load-data-icon| image:: img/load_data_icon.png :alt: Load Data :class: icon hh?hhhUsubstitution_definitionqh }q(h$]h%]h#]h"]h&]qXload-data-iconqauh)KMh*hh+]qh)q}q(hhh }q(Uurihh"]h#]h$]h%]qhah}qU*hsh&]Ualthuhhh+]hhubaubhN)q}q(hXIf you use the GUI, you can zoom-in to the biggest peak using left mouse button on the residual plot (the plot below the main plot). To zoom out, press the :guilabel:`View whole` toolbar button.hh?hhhhRh }q(h$]h%]h#]h"]h&]uh)KQh*hh+]q(h;XIf you use the GUI, you can zoom-in to the biggest peak using left mouse button on the residual plot (the plot below the main plot). To zoom out, press the qq}q(hXIf you use the GUI, you can zoom-in to the biggest peak using left mouse button on the residual plot (the plot below the main plot). To zoom out, press the hhubh)q}q(hUh }q(UrawtextX:guilabel:`View whole`h"]h#]h$]h%]qXguilabelqah&]uhhh+]qh;X View wholeqq}q(hUhhubahhubh;X toolbar button.qq}q(hX toolbar button.hhubeubhN)q}q(hXNow all data points are active. Because only the biggest peak is of interest for the sake of this example, the remaining points can be deactivated::hh?hhhhRh }r(h$]h%]h#]h"]h&]uh)KUh*hh+]rh;XNow all data points are active. Because only the biggest peak is of interest for the sake of this example, the remaining points can be deactivated:rr}r(hXNow all data points are active. Because only the biggest peak is of interest for the sake of this example, the remaining points can be deactivated:hhubaubh)r}r(hXA = (x > 23.0 and x < 26.0)hh?hhhhh }r(hhh"]h#]h$]h%]h&]uh)KYh*hh+]rh;XA = (x > 23.0 and x < 26.0)r r }r (hUhjubaubh)r }r (hXzchange to the :dfn:`range` mode (toolbar: |mode-range-icon|) and deactivate not needed points with the right mouse button.hh?hhhhh }r(h$]h%]rUadmonition-in-the-guirah#]h"]h&]uh)Nh*hh+]r(h4)r}r(hX In the GUIrhj hhhh8h }r(h$]h%]h#]h"]h&]uh)K[h+]rh;X In the GUIrr}r(hjhjubaubhN)r}r(hXzchange to the :dfn:`range` mode (toolbar: |mode-range-icon|) and deactivate not needed points with the right mouse button.hj hhhhRh }r(h$]h%]h#]h"]h&]uh)K]h+]r(h;Xchange to the rr}r (hXchange to the hjubcdocutils.nodes emphasis r!)r"}r#(hX :dfn:`range`h }r$(h$]h%]r%Udfnr&ah#]h"]h&]uhjh+]r'h;Xranger(r)}r*(hUhj"ubahUemphasisr+ubh;X mode (toolbar: r,r-}r.(hX mode (toolbar: hjubh)r/}r0(hXHimage:: img/mode_range_icon.png :alt: Data-Range Mode :class: iconr1h }r2(UuriXimg/mode_range_icon.pngr3h"]h#]h$]h%]r4Uiconr5ah}r6U*j3sh&]UalthXData-Range Moder7r8}r9buhjh+]hhubh;X?) and deactivate not needed points with the right mouse button.r:r;}r<(hX?) and deactivate not needed points with the right mouse button.hjubeubeubh )r=}r>(hX^.. |mode-range-icon| image:: img/mode_range_icon.png :alt: Data-Range Mode :class: icon hh?hhhhh }r?(h$]h%]h#]h"]h&]r@Xmode-range-iconrAauh)K`h*hh+]rBh)rC}rD(hj1h }rE(Uurij3h"]h#]h$]h%]rFj5ah}rGU*j3sh&]Ualtj8uhj=h+]hhubaubhN)rH}rI(hXAs our example data has no background to worry about, our next step is to define a peak with reasonable initial values and fit it to the data. We will use Gaussian. To see its formula, type: ``info Gaussian`` (or ``i Gaussian``) or look for it in the section :ref:`flist`.hh?hhhhRh }rJ(h$]h%]h#]h"]h&]uh)Kdh*hh+]rK(h;XAs our example data has no background to worry about, our next step is to define a peak with reasonable initial values and fit it to the data. We will use Gaussian. To see its formula, type: rLrM}rN(hXAs our example data has no background to worry about, our next step is to define a peak with reasonable initial values and fit it to the data. We will use Gaussian. To see its formula, type: hjHubh_)rO}rP(hX``info Gaussian``h }rQ(h$]h%]h#]h"]h&]uhjHh+]rRh;X info GaussianrSrT}rU(hUhjOubahhiubh;X (or rVrW}rX(hX (or hjHubh_)rY}rZ(hX``i Gaussian``h }r[(h$]h%]h#]h"]h&]uhjHh+]r\h;X i Gaussianr]r^}r_(hUhjYubahhiubh;X ) or look for it in the section r`ra}rb(hX ) or look for it in the section hjHubcsphinx.addnodes pending_xref rc)rd}re(hX :ref:`flist`rfhjHhhhU pending_xrefrgh }rh(UreftypeXrefUrefwarnriU reftargetrjXflistU refdomainXstdrkh"]h#]U refexplicith$]h%]h&]UrefdocrlX getstartedrmuh)Kdh+]rnh)ro}rp(hjfh }rq(h$]h%]rr(UxrefrsjkXstd-refrteh#]h"]h&]uhjdh+]ruh;Xflistrvrw}rx(hUhjoubahhubaubh;X.ry}rz(hX.hjHubeubhN)r{}r|(hX;To add a peak, either set the initial parameters manually::r}hh?hhhhRh }r~(h$]h%]h#]h"]h&]uh)Kjh*hh+]rh;X:To add a peak, either set the initial parameters manually:rr}r(hX:To add a peak, either set the initial parameters manually:hj{ubaubh)r}r(hX"F += Gaussian(~60000, ~24.6, ~0.2)hh?hhhhh }r(hhh"]h#]h$]h%]h&]uh)Klh*hh+]rh;X"F += Gaussian(~60000, ~24.6, ~0.2)rr}r(hUhjubaubh)r}r(hXit is also possible to set the initial parameters with the mouse: change the GUI mode to |mode-add-icon|, click on the plot and drag the mouse to select the position, height and width of a new peak.hh?hhhhh }r(h$]h%]rUadmonition-in-the-guirah#]h"]h&]uh)Nh*hh+]r(h4)r}r(hX In the GUIrhjhhhh8h }r(h$]h%]h#]h"]h&]uh)Knh+]rh;X In the GUIrr}r(hjhjubaubhN)r}r(hXit is also possible to set the initial parameters with the mouse: change the GUI mode to |mode-add-icon|, click on the plot and drag the mouse to select the position, height and width of a new peak.hjhhhhRh }r(h$]h%]h#]h"]h&]uh)Kph+]r(h;XYit is also possible to set the initial parameters with the mouse: change the GUI mode to rr}r(hXYit is also possible to set the initial parameters with the mouse: change the GUI mode to hjubh)r}r(hXDimage:: img/mode_add_icon.png :alt: Add-Peak Mode :class: iconrh }r(UuriXimg/mode_add_icon.pngrh"]h#]h$]h%]rUiconrah}rU*jsh&]UalthX Add-Peak Moderr}rbuhjh+]hhubh;X^, click on the plot and drag the mouse to select the position, height and width of a new peak.rr}r(hX^, click on the plot and drag the mouse to select the position, height and width of a new peak.hjubeubeubh )r}r(hXX.. |mode-add-icon| image:: img/mode_add_icon.png :alt: Add-Peak Mode :class: icon hh?hhhhh }r(h$]h%]h#]h"]h&]rX mode-add-iconrauh)Kuh*hh+]rh)r}r(hjh }r(Uurijh"]h#]h$]h%]rjah}rU*jsh&]Ualtjuhjh+]hhubaubhN)r}r(hXor let the program guess it::rhh?hhhhRh }r(h$]h%]h#]h"]h&]uh)Kyh*hh+]rh;Xor let the program guess it:rr}r(hXor let the program guess it:hjubaubh)r}r(hXguess Gaussianhh?hhhhh }r(hhh"]h#]h$]h%]h&]uh)K{h*hh+]rh;Xguess Gaussianrr}r(hUhjubaubh)r}r(hX`select :guilabel:`Gaussian` from the list of functions on the toolbar and press |add-peak-icon|.hh?hhhhh }r(h$]h%]rUadmonition-in-the-guirah#]h"]h&]uh)Nh*hh+]r(h4)r}r(hX In the GUIrhjhhhh8h }r(h$]h%]h#]h"]h&]uh)K}h+]rh;X In the GUIrr}r(hjhjubaubhN)r}r(hX`select :guilabel:`Gaussian` from the list of functions on the toolbar and press |add-peak-icon|.hjhhhhRh }r(h$]h%]h#]h"]h&]uh)Kh+]r(h;Xselect rr}r(hXselect hjubh)r}r(hUh }r(UrawtextX:guilabel:`Gaussian`h"]h#]h$]h%]rXguilabelrah&]uhjh+]rh;XGaussianrr}r(hUhjubahhubh;X5 from the list of functions on the toolbar and press rr}r(hX5 from the list of functions on the toolbar and press hjubh)r}r(hX?image:: img/add_peak_icon.png :alt: Auto Add :class: iconrh }r(UuriXimg/add_peak_icon.pngrh"]h#]h$]h%]rUiconrah}rU*jsh&]UalthXAuto Addrr}rbuhjh+]hhubh;X.r}r(hX.hjubeubeubh )r}r(hXS.. |add-peak-icon| image:: img/add_peak_icon.png :alt: Auto Add :class: icon hh?hhhhh }r(h$]h%]h#]h"]h&]rX add-peak-iconrauh)Kh*hh+]rh)r}r(hjh }r(Uurijh"]h#]h$]h%]rjah}rU*jsh&]Ualtjuhjh+]hhubaubhN)r}r(hXrIf the functions are not named explicitely (like in this example), they get automatic names ``%_1``, ``%_2``, etc.hh?hhhhRh }r(h$]h%]h#]h"]h&]uh)Kh*hh+]r(h;X\If the functions are not named explicitely (like in this example), they get automatic names rr}r(hX\If the functions are not named explicitely (like in this example), they get automatic names hjubh_)r}r(hX``%_1``h }r (h$]h%]h#]h"]h&]uhjh+]r h;X%_1r r }r (hUhjubahhiubh;X, rr}r(hX, hjubh_)r}r(hX``%_2``h }r(h$]h%]h#]h"]h&]uhjh+]rh;X%_2rr}r(hUhjubahhiubh;X, etc.rr}r(hX, etc.hjubeubhN)r}r(hX+Now let us fit the function. Type: ``fit``.rhh?hhhhRh }r(h$]h%]h#]h"]h&]uh)Kh*hh+]r(h;X#Now let us fit the function. Type: r r!}r"(hX#Now let us fit the function. Type: hjubh_)r#}r$(hX``fit``h }r%(h$]h%]h#]h"]h&]uhjh+]r&h;Xfitr'r(}r)(hUhj#ubahhiubh;X.r*}r+(hX.hjubeubh)r,}r-(hXFselect :menuselection:`Fit --> Run` from the menu or press |fit-icon|.r.hh?hhhhh }r/(h$]h%]r0Uadmonition-in-the-guir1ah#]h"]h&]uh)Nh*hh+]r2(h4)r3}r4(hX In the GUIr5hj,hhhh8h }r6(h$]h%]h#]h"]h&]uh)Kh+]r7h;X In the GUIr8r9}r:(hj5hj3ubaubhN)r;}r<(hj.hj,hhhhRh }r=(h$]h%]h#]h"]h&]uh)Kh+]r>(h;Xselect r?r@}rA(hXselect hj;ubh)rB}rC(hUh }rD(UrawtextX:menuselection:`Fit --> Run`h"]h#]h$]h%]rEX menuselectionrFah&]uhj;h+]rGh;X Fit ‣ RunrHrI}rJ(hUhjBubahhubh;X from the menu or press rKrL}rM(hX from the menu or press hj;ubh)rN}rO(hX5image:: img/fit_icon.png :alt: Fit :class: iconrPh }rQ(UuriXimg/fit_icon.pngrRh"]h#]h$]h%]rSUiconrTah}rUU*jRsh&]UalthXFitrVrW}rXbuhj;h+]hhubh;X.rY}rZ(hX.hj;ubeubeubh )r[}r\(hXD.. |fit-icon| image:: img/fit_icon.png :alt: Fit :class: icon hh?hhhhh }r](h$]h%]h#]h"]h&]r^Xfit-iconr_auh)Kh*hh+]r`h)ra}rb(hjPh }rc(UurijRh"]h#]h$]h%]rdjTah}reU*jRsh&]UaltjWuhj[h+]hhubaubcdocutils.nodes important rf)rg}rh(hXFitting minimizes the **weighted** sum of squared residuals (see :ref:`nonlinear`). The default :ref:`weights of points ` are not equal.hh?hhhU importantrih }rj(h$]h%]h#]h"]h&]uh)Nh*hh+]rkhN)rl}rm(hXFitting minimizes the **weighted** sum of squared residuals (see :ref:`nonlinear`). The default :ref:`weights of points ` are not equal.hjghhhhRh }rn(h$]h%]h#]h"]h&]uh)Kh+]ro(h;XFitting minimizes the rprq}rr(hXFitting minimizes the hjlubcdocutils.nodes strong rs)rt}ru(hX **weighted**h }rv(h$]h%]h#]h"]h&]uhjlh+]rwh;Xweightedrxry}rz(hUhjtubahUstrongr{ubh;X sum of squared residuals (see r|r}}r~(hX sum of squared residuals (see hjlubjc)r}r(hX:ref:`nonlinear`rhjlhhhjgh }r(UreftypeXrefjijjX nonlinearU refdomainXstdrh"]h#]U refexplicith$]h%]h&]jljmuh)Kh+]rh)r}r(hjh }r(h$]h%]r(jsjXstd-refreh#]h"]h&]uhjh+]rh;X nonlinearrr}r(hUhjubahhubaubh;X). The default rr}r(hX). The default hjlubjc)r}r(hX":ref:`weights of points `rhjlhhhjgh }r(UreftypeXrefjijjXweightsU refdomainXstdrh"]h#]U refexplicith$]h%]h&]jljmuh)Kh+]rh)r}r(hjh }r(h$]h%]r(jsjXstd-refreh#]h"]h&]uhjh+]rh;Xweights of pointsrr}r(hUhjubahhubaubh;X are not equal.rr}r(hX are not equal.hjlubeubaubhN)r}r(hX4To see the peak parameters, type: ``info prop %_1``.rhh?hhhhRh }r(h$]h%]h#]h"]h&]uh)Kh*hh+]r(h;X"To see the peak parameters, type: rr}r(hX"To see the peak parameters, type: hjubh_)r}r(hX``info prop %_1``h }r(h$]h%]h#]h"]h&]uhjh+]rh;X info prop %_1rr}r(hUhjubahhiubh;X.r}r(hX.hjubeubh)r}r(hXmove the cursor to the top of the peak and try out the context menu (the right mouse button), or check the parameters on the sidebar.hh?hhhhh }r(h$]h%]rUadmonition-in-the-guirah#]h"]h&]uh)Nh*hh+]r(h4)r}r(hX In the GUIrhjhhhh8h }r(h$]h%]h#]h"]h&]uh)Kh+]rh;X In the GUIrr}r(hjhjubaubhN)r}r(hXmove the cursor to the top of the peak and try out the context menu (the right mouse button), or check the parameters on the sidebar.rhjhhhhRh }r(h$]h%]h#]h"]h&]uh)Kh+]rh;Xmove the cursor to the top of the peak and try out the context menu (the right mouse button), or check the parameters on the sidebar.rr}r(hjhjubaubeubhN)r}r(hX That's it!rhh?hhhhRh }r(h$]h%]h#]h"]h&]uh)Kh*hh+]rh;X That's it!rr}r(hjhjubaubhN)r}r(hX0You can save all the issued commands to a file::rhh?hhhhRh }r(h$]h%]h#]h"]h&]uh)Kh*hh+]rh;X/You can save all the issued commands to a file:rr}r(hX/You can save all the issued commands to a file:hjubaubh)r}r(hXinfo history > myscript.fithh?hhhhh }r(hhh"]h#]h$]h%]h&]uh)Kh*hh+]rh;Xinfo history > myscript.fitrr}r(hUhjubaubhN)r}r(hXand later use it as a macro::rhh?hhhhRh }r(h$]h%]h#]h"]h&]uh)Kh*hh+]rh;Xand later use it as a macro:rr}r(hXand later use it as a macro:hjubaubh)r}r(hXexec myscript.fithh?hhhhh }r(hhh"]h#]h$]h%]h&]uh)Kh*hh+]rh;Xexec myscript.fitrr}r(hUhjubaubh)r}r(hXouse :menuselection:`Session --> Save History` and :menuselection:`Session --> Execute script`, correspondingly.hh?hhhhh }r(h$]h%]rUadmonition-in-the-guirah#]h"]h&]uh)Nh*hh+]r(h4)r}r(hX In the GUIrhjhhhh8h }r(h$]h%]h#]h"]h&]uh)Kh+]rh;X In the GUIrr}r(hjhjubaubhN)r}r(hXouse :menuselection:`Session --> Save History` and :menuselection:`Session --> Execute script`, correspondingly.hjhhhhRh }r(h$]h%]h#]h"]h&]uh)Kh+]r(h;Xuse rr}r(hXuse hjubh)r}r(hUh }r(UrawtextX):menuselection:`Session --> Save History`h"]h#]h$]h%]rX menuselectionr ah&]uhjh+]r h;XSession ‣ Save Historyr r }r (hUhjubahhubh;X and rr}r(hX and hjubh)r}r(hUh }r(UrawtextX+:menuselection:`Session --> Execute script`h"]h#]h$]h%]rX menuselectionrah&]uhjh+]rh;XSession ‣ Execute scriptrr}r(hUhjubahhubh;X, correspondingly.rr}r(hX, correspondingly.hjubeubeubeubeubhhhh,h }r(h$]h%]h#]h"]rUgraphical-interfacerah&]r h auh)Kh*hh+]r!(h4)r"}r#(hXGraphical Interfacer$hhhhhh8h }r%(h$]h%]h#]h"]h&]uh)Kh*hh+]r&h;XGraphical Interfacer'r(}r)(hj$hj"ubaubhN)r*}r+(hXThe GUI window of fityk consists of (from the top): menu bar, toolbar, main plot, helper (residual) plot, output window, input field, status bar and of sidebar at the right-hand side.r,hhhhhhRh }r-(h$]h%]h#]h"]h&]uh)K h*hh+]r.h;XThe GUI window of fityk consists of (from the top): menu bar, toolbar, main plot, helper (residual) plot, output window, input field, status bar and of sidebar at the right-hand side.r/r0}r1(hj,hj*ubaubhN)r2}r3(hXThe input field with the output window provide a console-like interface to the program. The output windows shows also commands corresponding to operations performed using the GUI (menu, dialogs, etc.).r4hhhhhhRh }r5(h$]h%]h#]h"]h&]uh)Kh*hh+]r6h;XThe input field with the output window provide a console-like interface to the program. The output windows shows also commands corresponding to operations performed using the GUI (menu, dialogs, etc.).r7r8}r9(hj4hj2ubaubhN)r:}r;(hXThe main plot can display data points, model that is to be fitted to the data and component functions of the model. Use the pop-up menu (click right button on the plot) to configure it. Some properties of the plot (e.g. colors of data points) can be changed using the sidebar.r<hhhhhhRh }r=(h$]h%]h#]h"]h&]uh)Kh*hh+]r>h;XThe main plot can display data points, model that is to be fitted to the data and component functions of the model. Use the pop-up menu (click right button on the plot) to configure it. Some properties of the plot (e.g. colors of data points) can be changed using the sidebar.r?r@}rA(hj<hj:ubaubhN)rB}rC(hXOne of the most useful things which can be displayed by the helper plot is the difference between the data and the model (it is also controlled by a pop-up menu). Hopefully, a quick look at this menu and a minute or two's worth of experiments will show the potential of this plot.rDhhhhhhRh }rE(h$]h%]h#]h"]h&]uh)Kh*hh+]rFh;XOne of the most useful things which can be displayed by the helper plot is the difference between the data and the model (it is also controlled by a pop-up menu). Hopefully, a quick look at this menu and a minute or two's worth of experiments will show the potential of this plot.rGrH}rI(hjDhjBubaubhN)rJ}rK(hXyConfiguration of the GUI (visible windows, colors, etc.) can be saved using :menuselection:`GUI --> Save current config`.hhhhhhRh }rL(h$]h%]h#]h"]h&]uh)Kh*hh+]rM(h;XLConfiguration of the GUI (visible windows, colors, etc.) can be saved using rNrO}rP(hXLConfiguration of the GUI (visible windows, colors, etc.) can be saved using hjJubh)rQ}rR(hUh }rS(UrawtextX,:menuselection:`GUI --> Save current config`h"]h#]h$]h%]rTX menuselectionrUah&]uhjJh+]rVh;XGUI ‣ Save current configrWrX}rY(hUhjQubahhubh;X.rZ}r[(hX.hjJubeubh)r\}r](hXF.. image:: img/fityk-with-tooltip.png :align: center :scale: 50 hhhhhhh }r^(UscaleK2UalignXcenterUuriXimg/fityk-with-tooltip.pngr_h"]h#]h$]h%]h}r`U*j_sh&]uh)Nh*hh+]ubhN)ra}rb(hXOn the **main plot**, the meaning of the left and right mouse button depends on current :dfn:`mode`. There are hints on the status bar. In normal mode, the left button is used for zooming and the right invokes the pop-up menu.hhhhhhRh }rc(h$]h%]h#]h"]h&]uh)K#h*hh+]rd(h;XOn the rerf}rg(hXOn the hjaubjs)rh}ri(hX **main plot**h }rj(h$]h%]h#]h"]h&]uhjah+]rkh;X main plotrlrm}rn(hUhjhubahj{ubh;XD, the meaning of the left and right mouse button depends on current rorp}rq(hXD, the meaning of the left and right mouse button depends on current hjaubj!)rr}rs(hX :dfn:`mode`h }rt(h$]h%]ruj&ah#]h"]h&]uhjah+]rvh;Xmoderwrx}ry(hUhjrubahj+ubh;X. There are hints on the status bar. In normal mode, the left button is used for zooming and the right invokes the pop-up menu.rzr{}r|(hX. There are hints on the status bar. In normal mode, the left button is used for zooming and the right invokes the pop-up menu.hjaubeubhN)r}}r~(hXOn the **helper plot**, selecting a horizontal range with the left button will show this range, automatically adjusting vertical range. The middle button shows the whole dataset (like |zoom-all-icon| in the toolbar). The right button displays a menu.hhhhhhRh }r(h$]h%]h#]h"]h&]uh)K(h*hh+]r(h;XOn the rr}r(hXOn the hj}ubjs)r}r(hX**helper plot**h }r(h$]h%]h#]h"]h&]uhj}h+]rh;X helper plotrr}r(hUhjubahj{ubh;X, selecting a horizontal range with the left button will show this range, automatically adjusting vertical range. The middle button shows the whole dataset (like rr}r(hX, selecting a horizontal range with the left button will show this range, automatically adjusting vertical range. The middle button shows the whole dataset (like hj}ubh)r}r(hX:image:: img/zoom_all.png :alt: Zoom All :class: iconrhj}hNhhh }r(UuriXimg/zoom_all.pngrh"]h#]h$]h%]rUiconrah}rU*jsh&]UalthXZoom Allrr}rbuh)Nh*hh+]ubh;X3 in the toolbar). The right button displays a menu.rr}r(hX3 in the toolbar). The right button displays a menu.hj}ubeubheubhhhhh }r(h$]h%]h#]h"]h&]rh auh)K-h*hh+]rh)r}r(hjh }r(Uurijh"]h#]h$]h%]rjah}rU*jsh&]Ualtjuhhh+]hhubaubjAj=j_j[hhjjjjuUparse_messagesr]rUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r(hh/hh(hhCh juh+]r(hhehUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh*hU current_linerNUtransform_messagesr]rcdocutils.nodes system_message r)r}r(hUh }r(h$]UlevelKh"]h#]Usourcehh%]h&]UlineKUtypeUINFOruh+]rhN)r}r(hUh }r(h$]h%]h#]h"]h&]uhjh+]rh;X0Hyperlink target "getstarted" is not referenced.rr}r(hUhjubahhRubahUsystem_messagerubaUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttps://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh8NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrUutf-8rU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUasciirU_sourcerhUgettext_compactrU generatorr NUdump_internalsr NU smart_quotesr U pep_base_urlr U https://www.python.org/dev/peps/r Usyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(h(hhCh?h/hjhuUsubstitution_namesr}r(h h jAjAj_j_hhjjjjuhh*h }r(h$]h"]h#]Usourcehh%]h&]uU footnotesr]r Urefidsr!}r"h(]r#hasub.PKFqܙ<<#fityk-v1.2.1/.doctrees/data.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xstandard deviation (or weight)qNX activepointsqXworking with multiple datasetsqNX xylib libraryq Xreading text filesq NXactive and inactive pointsq NX loading dataq NXsupported filetypesq NXfuncindtqX transformqX multidataqXaggregate functionsqNXdexportqXdataloadqXdataset transformationsqNX.functions and variables in data transformationqNXweightsqXdata point transformationsqNXdataqXexporting dataqNX datasettrquUsubstitution_defsq}q(Xload-data-iconqcdocutils.nodes substitution_definition q)q}q (U rawsourceq!XW.. |load-data-icon| image:: img/load_data_icon.png :alt: Load Data :class: icon Uparentq"cdocutils.nodes section q#)q$}q%(h!Uh"h#)q&}q'(h!UU referencedq(Kh"hUsourceq)X:/var/build/user_builds/fityk/checkouts/v1.2.1/doc/data.rstq*Uexpect_referenced_by_nameq+}q,hcdocutils.nodes target q-)q.}q/(h!X .. _data:h"hh)h*Utagnameq0Utargetq1U attributesq2}q3(Uidsq4]Ubackrefsq5]Udupnamesq6]Uclassesq7]Unamesq8]Urefidq9Udataq:uUlineq;KUdocumentqh2}q?(h6]q@XdataqAah7]h5]h4]qB(h:Uid1qCeh8]qDhauh;Khh2}q^(h6]h7]h5]h4]q_Ureading-text-filesq`ah8]qah auh;KohEmpty lines and comments that start with hash (#) are skipped.qh"h\h)h*h0hnh2}q(h6]h7]h5]h4]h8]uh;KthEmpty lines and comments that start with hash (#) are skipped.qq}q(h!hh"hubaubhk)q}q(h!XSince there is a lot of files in the world that contain numeric data mixed with text, unless the :option:`strict` option is given any text that can not be interpreted as a number is regarded a start of comment (the rest of the line is ignored).h"h\h)h*h0hnh2}q(h6]h7]h5]h4]h8]uh;Kvh}r?(h!Xn option is given, the line preceding the first data line is used to set either column names or the block name.h"jubeubhk)r@}rA(h!XIf the file starts with the "``LAMMPS (``" string, the :option:`last_line_header` option is set automatically. This is very helpful when plotting data from LAMMPS log files.h"h\h)h*h0hnh2}rB(h6]h7]h5]h4]h8]uh;Khh2}re(h6]h7]h5]h4]rf(Uactive-and-inactive-pointsrgjdeh8]rh(h heuh;Kh`::h"hWh)h*h0hnh2}ru(h6]h7]h5]h4]h8]uh;Kh`rh"jsh)h*h0hh2}r(UreftypeXrefhhX transformU refdomainXstdrh4]h5]U refexplicith6]h7]h8]hhuh;Kh=]rj)r}r(h!jh2}r(h6]h7]r(hjXstd-refreh5]h4]h8]uh"jh=]rhOXtransformationrr}r(h!Uh"jubah0jubaubhOX:r}r(h!X:h"jsubeubcdocutils.nodes literal_block r)r}r(h!XA = boolean-conditionh"hWh)h*h0U literal_blockrh2}r(U xml:spacerUpreserverh4]h5]h6]h7]h8]uh;Khh2}r(h6]h7]h5]h4]r(Ustandard-deviation-or-weightrjeh8]r(hheuh;KhubhOX.r?}r@(h!X.h"jubeubhk)rA}rB(h!XStandard deviation of points can be :ref:`read from file ` together with the *x* and *y* coordinates. Otherwise, it is set either to max(*y*:sup:`1/2`, 1) or to 1, depending on the :option:`default_sigma` option. Setting std. dev. as a square root of the value is common and has theoretical ground when *y* is the number of independent events. You can always change the standard deviation, e.g. make it equal for every point with the command: ``S=1``. See :ref:`transform` for details.h"jh)h*h0hnh2}rC(h6]h7]h5]h4]h8]uh;Kh`rJh"jAh)h*h0hh2}rK(UreftypeXrefhhXdataloadU refdomainXstdrLh4]h5]U refexplicith6]h7]h8]hhuh;Kh=]rMj)rN}rO(h!jJh2}rP(h6]h7]rQ(hjLXstd-refrReh5]h4]h8]uh"jHh=]rShOXread from filerTrU}rV(h!Uh"jNubah0jubaubhOX together with the rWrX}rY(h!X together with the h"jAubht)rZ}r[(h!X*x*h2}r\(h6]h7]h5]h4]h8]uh"jAh=]r]hOXxr^}r_(h!Uh"jZubah0h|ubhOX and r`ra}rb(h!X and h"jAubht)rc}rd(h!X*y*h2}re(h6]h7]h5]h4]h8]uh"jAh=]rfhOXyrg}rh(h!Uh"jcubah0h|ubhOX1 coordinates. Otherwise, it is set either to max(rirj}rk(h!X1 coordinates. Otherwise, it is set either to max(h"jAubht)rl}rm(h!X*y*h2}rn(h6]h7]h5]h4]h8]uh"jAh=]rohOXyrp}rq(h!Uh"jlubah0h|ubcdocutils.nodes superscript rr)rs}rt(h!X :sup:`1/2`h2}ru(h6]h7]h5]h4]h8]uh"jAh=]rvhOX1/2rwrx}ry(h!Uh"jsubah0U superscriptrzubhOX, 1) or to 1, depending on the r{r|}r}(h!X, 1) or to 1, depending on the h"jAubh)r~}r(h!X:option:`default_sigma`rh"jAh)h*h0hh2}r(UreftypeXoptionhhX default_sigmaU refdomainXstdrh4]h5]U refexplicith6]h7]h8]hhhNuh;Kh=]rh)r}r(h!jh2}r(h6]h7]r(hjX std-optionreh5]h4]h8]uh"j~h=]rhOX default_sigmarr}r(h!Uh"jubah0hubaubhOXc option. Setting std. dev. as a square root of the value is common and has theoretical ground when rr}r(h!Xc option. Setting std. dev. as a square root of the value is common and has theoretical ground when h"jAubht)r}r(h!X*y*h2}r(h6]h7]h5]h4]h8]uh"jAh=]rhOXyr}r(h!Uh"jubah0h|ubhOX is the number of independent events. You can always change the standard deviation, e.g. make it equal for every point with the command: rr}r(h!X is the number of independent events. You can always change the standard deviation, e.g. make it equal for every point with the command: h"jAubh)r}r(h!X``S=1``h2}r(h6]h7]h5]h4]h8]uh"jAh=]rhOXS=1rr}r(h!Uh"jubah0hubhOX. See rr}r(h!X. See h"jAubh)r}r(h!X:ref:`transform`rh"jAh)h*h0hh2}r(UreftypeXrefhhX transformU refdomainXstdrh4]h5]U refexplicith6]h7]h8]hhuh;Kh=]rj)r}r(h!jh2}r(h6]h7]r(hjXstd-refreh5]h4]h8]uh"jh=]rhOX transformrr}r(h!Uh"jubah0jubaubhOX for details.rr}r(h!X for details.h"jAubeubcdocutils.nodes note r)r}r(h!XIt is often the case that user is not sure what standard deviation should be assumed, but it is her responsibility to pick something.h"jh)h*h0Unoterh2}r(h6]h7]h5]h4]h8]uh;Nhh2}r(h6]h7]h5]h4]r(Udata-point-transformationsrjeh8]r(hheuh;Kh}r?(h!XB``Y = -y`` changes the sign of the *y* coordinate for all points. h"jh)h*h0hh2}r@(h6]h7]h5]h4]h8]uh;Nhh)h*h0hnh2}rD(h6]h7]h5]h4]h8]uh;Kh=]rE(h)rF}rG(h!X ``Y = -y``h2}rH(h6]h7]h5]h4]h8]uh"jBh=]rIhOXY = -yrJrK}rL(h!Uh"jFubah0hubhOX changes the sign of the rMrN}rO(h!X changes the sign of the h"jBubht)rP}rQ(h!X*y*h2}rR(h6]h7]h5]h4]h8]uh"jBh=]rShOXyrT}rU(h!Uh"jPubah0h|ubhOX coordinate for all points.rVrW}rX(h!X coordinate for all points.h"jBubeubaubeubhk)rY}rZ(h!XOn the left side of the equality sign you can have one of symbols ``X``, ``Y``, ``S``, ``A``, possibly with the index in brackets. The symbols on the left side are case insensitive.h"jh)h*h0hnh2}r[(h6]h7]h5]h4]h8]uh;Kh}r?(h!X%Before the transformation a new array of points is created as a copy of the old array. Operations are applied sequentially from the first point to the last one, so while ``Y[n+1]`` and ``y[n+1]`` have always the same value, ``Y[n-1]`` and ``y[n-1]`` may differ. For example, the two commands::h"jh)h*h0hnh2}r@(h6]h7]h5]h4]h8]uh;Khubh)rE}rF(h!X ``Y[n+1]``h2}rG(h6]h7]h5]h4]h8]uh"j>h=]rHhOXY[n+1]rIrJ}rK(h!Uh"jEubah0hubhOX and rLrM}rN(h!X and h"j>ubh)rO}rP(h!X ``y[n+1]``h2}rQ(h6]h7]h5]h4]h8]uh"j>h=]rRhOXy[n+1]rSrT}rU(h!Uh"jOubah0hubhOX have always the same value, rVrW}rX(h!X have always the same value, h"j>ubh)rY}rZ(h!X ``Y[n-1]``h2}r[(h6]h7]h5]h4]h8]uh"j>h=]r\hOXY[n-1]r]r^}r_(h!Uh"jYubah0hubhOX and r`ra}rb(h!X and h"j>ubh)rc}rd(h!X ``y[n-1]``h2}re(h6]h7]h5]h4]h8]uh"j>h=]rfhOXy[n-1]rgrh}ri(h!Uh"jcubah0hubhOX+ may differ. For example, the two commands:rjrk}rl(h!X+ may differ. For example, the two commands:h"j>ubeubj)rm}rn(h!X#Y = y[n] + y[n-1] Y = y[n] + Y[n-1]h"jh)h*h0jh2}ro(jjh4]h5]h6]h7]h8]uh;Khreal numbers in normal or scientific format (e.g. ``1.23e5``),h"jh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;Mh=]r(hOX2real numbers in normal or scientific format (e.g. rr}r(h!X2real numbers in normal or scientific format (e.g. h"jubh)r}r(h!X ``1.23e5``h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOX1.23e5rr}r(h!Uh"jubah0hubhOX),rr}r(h!X),h"jubeubaubh)r}r(h!X.constants ``pi``, ``true`` (1), ``false`` (0) h"jh)h*h0hh2}r(h6]h7]h5]h4]h8]uh;Nh}r?(h!Uh"j9ubah0hubhOX, r@rA}rB(h!X, h"j2ubh)rC}rD(h!X``or``h2}rE(h6]h7]h5]h4]h8]uh"j2h=]rFhOXorrGrH}rI(h!Uh"jCubah0hubhOX, rJrK}rL(h!X, h"j2ubh)rM}rN(h!X``not``h2}rO(h6]h7]h5]h4]h8]uh"j2h=]rPhOXnotrQrR}rS(h!Uh"jMubah0hubhOX,rT}rU(h!X,h"j2ubeubaubh)rV}rW(h!X<comparisions: ``>``, ``>=``, ``<``, ``<=``, ``==``, ``!=``. h"jh)h*h0hh2}rX(h6]h7]h5]h4]h8]uh;Nh``, ``>=``, ``<``, ``<=``, ``==``, ``!=``.h"jVh)h*h0hnh2}r\(h6]h7]h5]h4]h8]uh;M h=]r](hOXcomparisions: r^r_}r`(h!Xcomparisions: h"jZubh)ra}rb(h!X``>``h2}rc(h6]h7]h5]h4]h8]uh"jZh=]rdhOX>re}rf(h!Uh"jaubah0hubhOX, rgrh}ri(h!X, h"jZubh)rj}rk(h!X``>=``h2}rl(h6]h7]h5]h4]h8]uh"jZh=]rmhOX>=rnro}rp(h!Uh"jjubah0hubhOX, rqrr}rs(h!X, h"jZubh)rt}ru(h!X``<``h2}rv(h6]h7]h5]h4]h8]uh"jZh=]rwhOXhk)r?}r@(h!j<h"j:h)h*h0hnh2}rA(h6]h7]h5]h4]h8]uh;Mh=]rBh)rC}rD(h!j<h2}rE(h6]h7]h5]h4]h8]uh"j?h=]rFhOXtanhrGrH}rI(h!Uh"jCubah0hubaubah0hubh)rJ}rK(h!X``atan``rLh2}rM(h6]h7]h5]h4]h8]uh"jh=]rNhk)rO}rP(h!jLh"jJh)h*h0hnh2}rQ(h6]h7]h5]h4]h8]uh;Mh=]rRh)rS}rT(h!jLh2}rU(h6]h7]h5]h4]h8]uh"jOh=]rVhOXatanrWrX}rY(h!Uh"jSubah0hubaubah0hubh)rZ}r[(h!X``asin``r\h2}r](h6]h7]h5]h4]h8]uh"jh=]r^hk)r_}r`(h!j\h"jZh)h*h0hnh2}ra(h6]h7]h5]h4]h8]uh;Mh=]rbh)rc}rd(h!j\h2}re(h6]h7]h5]h4]h8]uh"j_h=]rfhOXasinrgrh}ri(h!Uh"jcubah0hubaubah0hubh)rj}rk(h!X``acos``rlh2}rm(h6]h7]h5]h4]h8]uh"jh=]rnhk)ro}rp(h!jlh"jjh)h*h0hnh2}rq(h6]h7]h5]h4]h8]uh;Mh=]rrh)rs}rt(h!jlh2}ru(h6]h7]h5]h4]h8]uh"joh=]rvhOXacosrwrx}ry(h!Uh"jsubah0hubaubah0hubh)rz}r{(h!X``erf``r|h2}r}(h6]h7]h5]h4]h8]uh"jh=]r~hk)r}r(h!j|h"jzh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;Mh=]rh)r}r(h!j|h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXerfrr}r(h!Uh"jubah0hubaubah0hubh)r}r(h!X``erfc``rh2}r(h6]h7]h5]h4]h8]uh"jh=]rhk)r}r(h!jh"jh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;Mh=]rh)r}r(h!jh2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXerfcrr}r(h!Uh"jubah0hubaubah0hubh)r}r(h!X ``gamma``rh2}r(h6]h7]h5]h4]h8]uh"jh=]rhk)r}r(h!jh"jh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;M h=]rh)r}r(h!jh2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXgammarr}r(h!Uh"jubah0hubaubah0hubh)r}r(h!X%``lgamma`` (=ln(\|\ ``gamma()``\ \|))rh2}r(h6]h7]h5]h4]h8]uh"jh=]rhk)r}r(h!jh"jh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;M!h=]r(h)r}r(h!X ``lgamma``h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXlgammarr}r(h!Uh"jubah0hubhOX (=ln(|rr}r(h!X (=ln(\|\ h"jubh)r}r(h!X ``gamma()``h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXgamma()rr}r(h!Uh"jubah0hubhOX|))rr}r(h!X\ \|))h"jubeubah0hubh)r}r(h!X``abs``rh2}r(h6]h7]h5]h4]h8]uh"jh=]rhk)r}r(h!jh"jh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;M"h=]rh)r}r(h!jh2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXabsrr}r(h!Uh"jubah0hubaubah0hubh)r}r(h!X*``round`` (rounds to the nearest integer) h2}r(h6]h7]h5]h4]h8]uh"jh=]rhk)r}r(h!X)``round`` (rounds to the nearest integer)h"jh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;M#h=]r(h)r}r(h!X ``round``h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXroundrr}r(h!Uh"jubah0hubhOX (rounds to the nearest integer)rr}r(h!X (rounds to the nearest integer)h"jubeubah0hubeh0hubeubh)r}r(h!XFtwo argument functions: * ``mod`` (modulo) * ``min2`` * ``max2`` (``max2(3,5)`` gives 5), * ``randuniform(a, b)`` (random number from interval (a, b)), * ``randnormal(mu, sigma)`` (random number from normal distribution), * ``voigt(a, b)`` = :math:`\frac{b}{\pi} \int_{-\infty}^{+\infty} \frac{\exp(-t^2)}{b^2+(a-t)^2} dt` h"jh)Nh0hh2}r(h6]h7]h5]h4]h8]uh;Nh}r?(h!j;h"j9h)h*h0hnh2}r@(h6]h7]h5]h4]h8]uh;M*h=]rA(h)rB}rC(h!X``randuniform(a, b)``h2}rD(h6]h7]h5]h4]h8]uh"j>h=]rEhOXranduniform(a, b)rFrG}rH(h!Uh"jBubah0hubhOX& (random number from interval (a, b)),rIrJ}rK(h!X& (random number from interval (a, b)),h"j>ubeubah0hubh)rL}rM(h!XC``randnormal(mu, sigma)`` (random number from normal distribution),rNh2}rO(h6]h7]h5]h4]h8]uh"jh=]rPhk)rQ}rR(h!jNh"jLh)h*h0hnh2}rS(h6]h7]h5]h4]h8]uh;M+h=]rT(h)rU}rV(h!X``randnormal(mu, sigma)``h2}rW(h6]h7]h5]h4]h8]uh"jQh=]rXhOXrandnormal(mu, sigma)rYrZ}r[(h!Uh"jUubah0hubhOX* (random number from normal distribution),r\r]}r^(h!X* (random number from normal distribution),h"jQubeubah0hubh)r_}r`(h!Xc``voigt(a, b)`` = :math:`\frac{b}{\pi} \int_{-\infty}^{+\infty} \frac{\exp(-t^2)}{b^2+(a-t)^2} dt` h2}ra(h6]h7]h5]h4]h8]uh"jh=]rbhk)rc}rd(h!Xb``voigt(a, b)`` = :math:`\frac{b}{\pi} \int_{-\infty}^{+\infty} \frac{\exp(-t^2)}{b^2+(a-t)^2} dt`h"j_h)h*h0hnh2}re(h6]h7]h5]h4]h8]uh;M,h=]rf(h)rg}rh(h!X``voigt(a, b)``h2}ri(h6]h7]h5]h4]h8]uh"jch=]rjhOX voigt(a, b)rkrl}rm(h!Uh"jgubah0hubhOX = rnro}rp(h!X = h"jcubj:)rq}rr(h!Uh2}rs(UlatexXH\frac{b}{\pi} \int_{-\infty}^{+\infty} \frac{\exp(-t^2)}{b^2+(a-t)^2} dth4]h5]h6]h7]h8]uh"jch=]h0j>ubeubah0hubeh0hubeubh)rt}ru(h!Xternary ``?:`` operator: ``condition ? expression1 : expression2``, which returns *expression1* if condition is true and *expression2* otherwise. h"jh)h*h0hh2}rv(h6]h7]h5]h4]h8]uh;Nh Q h"jh)h*h0hh2}r(h6]h7]h5]h4]h8]uh;Nh Qh"jh0jh2}r(jjh4]h5]h6]h7]h8]uh;M6h=]rhOX2X = 4*pi * sin(x/2*pi/180) / 1.54051 # Cu 2θ -> Qrr}r(h!Uh"jubaubeubh)r}r(h!X6Negative *y* values can be zeroed:: Y = max2(y, 0) h"jh)h*h0hh2}r(h6]h7]h5]h4]h8]uh;Nhh=]rhOXS = 1r r }r (h!Uh"jubaubeubh)r }r (h!XaIt is possible to select active range of data:: A = x > 40 and x < 60 # select range (40, 60) h"jh)h*h0hh2}r(h6]h7]h5]h4]h8]uh;Nh 40 and x < 60 # select range (40, 60)h"j h0jh2}r(jjh4]h5]h6]h7]h8]uh;MBh=]rhOX-A = x > 40 and x < 60 # select range (40, 60)rr}r(h!Uh"jubaubeubeubhk)r}r(h!XAll operations are performed on **real numbers**. Two numbers that differ less than *ε* (the value of *ε* is set by the :ref:`option epsilon `) are considered equal.h"jh)h*h0hnh2}r (h6]h7]h5]h4]h8]uh;MDh}r?(h!Uh"j:ubah0h|ubhOX is set by the r@rA}rB(h!X is set by the h"jubh)rC}rD(h!X:ref:`option epsilon `rEh"jh)h*h0hh2}rF(UreftypeXrefhhXepsilonU refdomainXstdrGh4]h5]U refexplicith6]h7]h8]hhuh;MDh=]rHj)rI}rJ(h!jEh2}rK(h6]h7]rL(hjGXstd-refrMeh5]h4]h8]uh"jCh=]rNhOXoption epsilonrOrP}rQ(h!Uh"jIubah0jubaubhOX) are considered equal.rRrS}rT(h!X) are considered equal.h"jubeubhk)rU}rV(h!XfPoints can be created or deleted by changing the value of ``M``. For example, the following commands::h"jh)h*h0hnh2}rW(h6]h7]h5]h4]h8]uh;MIh (h!X``s``h2}r? (h6]h7]h5]h4]h8]uh"j h=]r@ hOXsrA }rB (h!Uh"j= ubah0hubhOX and rC rD }rE (h!X and h"j ubh)rF }rG (h!X``a``h2}rH (h6]h7]h5]h4]h8]uh"j h=]rI hOXarJ }rK (h!Uh"jF ubah0hubhOXO that contain old values are not changed. This makes possible to swap the axes:rL rM }rN (h!XO that contain old values are not changed. This makes possible to swap the axes:h"j ubeubj)rO }rP (h!XX=y, Y=xh"jh)h*h0jh2}rQ (jjh4]h5]h6]h7]h8]uh;Meh` option.h"jh)h*h0hnh2}r (h6]h7]h5]h4]h8]uh;M{h command. The precision of printed numbers is governed by the r r }r (h!X> command. The precision of printed numbers is governed by the h"j ubh)r }r (h!X&:ref:`numeric_format `r h"j h)h*h0hh2}r (UreftypeXrefhhXnumeric_formatU refdomainXstdr h4]h5]U refexplicith6]h7]h8]hhuh;M{h=]r j)r }r (h!j h2}r (h6]h7]r (hj Xstd-refr eh5]h4]h8]uh"j h=]r hOXnumeric_formatr r }r (h!Uh"j ubah0jubaubhOX option.r r }r (h!X option.h"j ubeubj)r }r (h!XGprint M # the number of points print y[index(20)] # value of y for x=20h"jh)h*h0jh2}r (jjh4]h5]h6]h7]h8]uh;Mhh2}r (h6]h7]h5]h4]r Uaggregate-functionsr ah8]r hauh;Mh }r? (h!Uh"j9 ubah0hubhOX --- the largest value,r@ rA }rB (h!X --- the largest value,h"j5 ubeubaubh)rC }rD (h!X``argmin()`` --- (stands for the argument of the minimum) the x value of the point for which the expression in brackets has the smallest value, h"j h)Nh0hh2}rE (h6]h7]h5]h4]h8]uh;Nh 40 and x < 60) # the largest y value for x in (40, 60) p max(y if a) # the largest y value in the active range p min(x if y > 0.1)] # x of the first point with y > 0.1 p count(y>100) # the number of points that have y above 100 p count(y>avg(y)) # aggregate functions can be nested p y[min(n if y > 100)] # the first (from the left) value of y above 100 # take the first 2000 points, average them and subtract as background Y = y - avg(y if n<2000) Y = y / darea(y) # normalize data area # make active only the points on the left from the first # point with y > 0.1 a = x < min(x if y > 0.1)]h"j h)h*h0jh2}r2 (jjh4]h5]h6]h7]h8]uh;Mh 40 and x < 60) # the largest y value for x in (40, 60) p max(y if a) # the largest y value in the active range p min(x if y > 0.1)] # x of the first point with y > 0.1 p count(y>100) # the number of points that have y above 100 p count(y>avg(y)) # aggregate functions can be nested p y[min(n if y > 100)] # the first (from the left) value of y above 100 # take the first 2000 points, average them and subtract as background Y = y - avg(y if n<2000) Y = y / darea(y) # normalize data area # make active only the points on the left from the first # point with y > 0.1 a = x < min(x if y > 0.1)]r4 r5 }r6 (h!Uh"j0 ubaubh-)r7 }r8 (h!X .. _funcindt:h"j h)h*h0h1h2}r9 (h4]h5]h6]h7]h8]h9Ufuncindtr: uh;Mhh2}r> (h6]h7]h5]h4]r? (U.functions-and-variables-in-data-transformationr@ j: eh8]rA (hheuh;Mh (h!Uh"j8 ubah0hubhOX and r? r@ }rA (h!X and h"j ubh)rB }rC (h!X``Area``h2}rD (h6]h7]h5]h4]h8]uh"j h=]rE hOXArearF rG }rH (h!Uh"jB ubah0hubhOX (e.g. rI rJ }rK (h!X (e.g. h"j ubh)rL }rM (h!X ``%fun.Area``h2}rN (h6]h7]h5]h4]h8]uh"j h=]rO hOX %fun.ArearP rQ }rR (h!Uh"jL ubah0hubhOXt) can also be used. Pseudo-parameters are supported only by functions, which know how to calculate these properties.rS rT }rU (h!Xt) can also be used. Pseudo-parameters are supported only by functions, which know how to calculate these properties.h"j ubeubhk)rV }rW (h!X?It is also possible to calculate some properties of %functions:rX h"j; h)h*h0hnh2}rY (h6]h7]h5]h4]h8]uh;Mh (h6]h7]h5]h4]h8]uh;M hh2}rQ (h6]h7]h5]h4]rR (Uworking-with-multiple-datasetsrS jM eh8]rT (hheuh;Mh`.h"jN h)h*h0hnh2}r (h6]h7]h5]h4]h8]uh;M1h`r h"j h)h*h0hh2}r (UreftypeXrefhhX datasettrU refdomainXstdr h4]h5]U refexplicith6]h7]h8]hhuh;M1h=]r j)r }r (h!j h2}r (h6]h7]r (hj Xstd-refr eh5]h4]h8]uh"j h=]r hOXthe next sectionr r }r (h!Uh"j ubah0jubaubhOX.r }r (h!X.h"j ubeubhk)r }r (h!XxEach dataset has a separate :ref:`model `, that can be fitted to the data. This is explained in the next chapter.h"jN h)h*h0hnh2}r (h6]h7]h5]h4]h8]uh;M4h`r h"j h)h*h0hh2}r (UreftypeXrefhhXmodelU refdomainXstdr h4]h5]U refexplicith6]h7]h8]hhuh;M4h=]r j)r }r (h!j h2}r (h6]h7]r(hj Xstd-refreh5]h4]h8]uh"j h=]rhOXmodelrr}r(h!Uh"j ubah0jubaubhOXH, that can be fitted to the data. This is explained in the next chapter.rr}r(h!XH, that can be fitted to the data. This is explained in the next chapter.h"j ubeubhk)r }r (h!X|Each dataset also has a title (it does not have to be unique, however). When loading file, a title is automatically created:r h"jN h)h*h0hnh2}r (h6]h7]h5]h4]h8]uh;M7hh=]r>hOX-otherwise, the title is based on the filenamer?r@}rA(h!j<h"j:ubaubaubeubhk)rB}rC(h!X)Titles can be changed using the command::rDh"jN h)h*h0hnh2}rE(h6]h7]h5]h4]h8]uh;M@hh2}ri(h6]h7]h5]h4]rj(Udataset-transformationsrkjeeh8]rl(hheuh;MIhreturns ``@n`` with added *y* values from interpolated ``@m``,h"jh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;MVh=]r(hOXreturns rr }r (h!Xreturns h"jubh)r }r (h!X``@n``h2}r (h6]h7]h5]h4]h8]uh"jh=]rhOX@nrr}r(h!Uh"j ubah0hubhOX with added rr}r(h!X with added h"jubht)r}r(h!X*y*h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXyr}r(h!Uh"jubah0h|ubhOX values from interpolated rr}r(h!X values from interpolated h"jubh)r}r(h!X``@m``h2}r (h6]h7]h5]h4]h8]uh"jh=]r!hOX@mr"r#}r$(h!Uh"jubah0hubhOX,r%}r&(h!X,h"jubeubah0jo ubeubjL )r'}r((h!XP``@n - @m`` returns ``@n`` with subtracted *y* values from interpolated ``@m``, h"jh)h*h0jO h2}r)(h6]h7]h5]h4]h8]uh;MYh(hOXreturns r?r@}rA(h!Xreturns h"j;ubh)rB}rC(h!X``@n``h2}rD(h6]h7]h5]h4]h8]uh"j;h=]rEhOX@nrFrG}rH(h!Uh"jBubah0hubhOX with subtracted rIrJ}rK(h!X with subtracted h"j;ubht)rL}rM(h!X*y*h2}rN(h6]h7]h5]h4]h8]uh"j;h=]rOhOXyrP}rQ(h!Uh"jLubah0h|ubhOX values from interpolated rRrS}rT(h!X values from interpolated h"j;ubh)rU}rV(h!X``@m``h2}rW(h6]h7]h5]h4]h8]uh"j;h=]rXhOX@mrYrZ}r[(h!Uh"jUubah0hubhOX,r\}r](h!X,h"j;ubeubah0jo ubeubjL )r^}r_(h!X=``@n and @m`` returns points from both datasets (re-sorted), h"jh)h*h0jO h2}r`(h6]h7]h5]h4]h8]uh;M\h`. *x* of the merged point is the average, and *y* and *σ* are sums of components. h"jh)h*h0jO h2}r(h6]h7]h5]h4]h8]uh;Mdh=]r(jR )r}r(h!X``sum_same_x(@n)``rh"jh)h*h0jU h2}r(h6]h7]h5]h4]h8]uh;Mdh=]rh)r}r(h!jh2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXsum_same_x(@n)rr}r(h!Uh"jubah0hubaubjb )r}r(h!Uh2}r(h6]h7]h5]h4]h8]uh"jh=]rhk)r}r(h!XMerges points which have distance in *x* is smaller than :ref:`epsilon `. *x* of the merged point is the average, and *y* and *σ* are sums of components.h"jh)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;Mah=]r(hOX%Merges points which have distance in rr}r(h!X%Merges points which have distance in h"jubht)r}r(h!X*x*h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXxr}r(h!Uh"jubah0h|ubhOX is smaller than rr}r(h!X is smaller than h"jubh)r}r(h!X:ref:`epsilon `rh"jh)h*h0hh2}r(UreftypeXrefhhXepsilonU refdomainXstdrh4]h5]U refexplicith6]h7]h8]hhuh;Mah=]rj)r}r(h!jh2}r(h6]h7]r(hjXstd-refreh5]h4]h8]uh"jh=]rhOXepsilonrr}r(h!Uh"jubah0jubaubhOX. rr}r(h!X. h"jubht)r}r(h!X*x*h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXxr}r(h!Uh"jubah0h|ubhOX) of the merged point is the average, and rr}r(h!X) of the merged point is the average, and h"jubht)r}r(h!X*y*h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXyr}r(h!Uh"jubah0h|ubhOX and rr}r(h!X and h"jubht)r}r(h!X*σ*h2}r(h6]h7]h5]h4]h8]uh"jh=]rhOXσr}r(h!Uh"jubah0h|ubhOX are sums of components.rr}r(h!X are sums of components.h"jubeubah0jo ubeubjL )r}r(h!Xf``avg_same_x(@n)`` The same as ``sum_same_x``, but *y* and *σ* are set as the average of components. h"jh)h*h0jO h2}r(h6]h7]h5]h4]h8]uh;Mhh(h!Uh"h&h)h*h+}r?hj9sh0h>h2}r@(h6]h7]h5]h4]rA(Uexporting-datarBj<eh8]rC(hheuh;Mzh file.tsvh"j=h)h*h0jh2}rX(jjh4]h5]h6]h7]h8]uh;M~h file.tsvrZr[}r\(h!Uh"jVubaubhk)r]}r^(h!X<can export data to an ASCII TSV (tab separated values) file.r_h"j=h)h*h0hnh2}r`(h6]h7]h5]h4]h8]uh;Mh Export`rgh"j=h)h*h0jh2}rh(h6]h7]riUadmonition-in-the-guirjah5]h4]h8]uh;Nh file.tsvh"j=h)h*h0jh2}r(jjh4]h5]h6]h7]h8]uh;Mh file.tsvrr}r(h!Uh"jubaubhk)r}r(h!X$Any expressions can be printed out::rh"j=h)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;Mh file.tsvh"j=h)h*h0jh2}r(jjh4]h5]h6]h7]h8]uh;Mh file.tsvrr}r(h!Uh"jubaubhk)r}r(h!XrIt is possible to select which points are to be printed by replacing ``all`` with ``if`` followed by a condition::h"j=h)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;Mh 30 and x < 40: x, y # only points in (30,40)h"j=h)h*h0jh2}r(jjh4]h5]h6]h7]h8]uh;Mh 30 and x < 40: x, y # only points in (30,40)rr}r(h!Uh"jubaubhk)r}r(h!XcThe option :ref:`numeric_format ` controls the format and precision of all numbers.h"j=h)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;Mh`rh"jh)h*h0hh2}r(UreftypeXrefhhXnumeric_formatU refdomainXstdrh4]h5]U refexplicith6]h7]h8]hhuh;Mh=]rj)r}r(h!jh2}r(h6]h7]r(hjXstd-refreh5]h4]h8]uh"jh=]rhOXnumeric_formatrr}r(h!Uh"jubah0jubaubhOX2 controls the format and precision of all numbers.rr}r(h!X2 controls the format and precision of all numbers.h"jubeubeubeubh)h*h+}rhhSsh0h>h2}r(h6]h7]h5]h4]r(U loading-datarhVeh8]r(h heuh;K h`_.rh"h$h)h*h0hnh2}r(h6]h7]h5]h4]h8]uh;K h`_h2}r(UnameX xylib libraryUrefurirXhttp://xylib.sourceforge.net/rh4]h5]h6]h7]h8]uh"jh=]rhOX xylib libraryrr}r(h!Uh"jubah0U referencerubh-)r}r(h!X h(Kh"jh0h1h2}r(Urefurijh4]rU xylib-libraryrah5]h6]h7]h8]rh auh=]ubhOX.r}r(h!X.h"jubeubj)r}r(h!Xdclick |load-data-icon|. If it just works for your files, you may go straight to :ref:`activepoints`.h"h$h)h*h0jh2}r(h6]h7]rUadmonition-in-the-guirah5]h4]h8]uh;Nh}r?(h!X/Points are loaded from files using the command:h"j8ubaubj)r@}rA(h!X@dataslot < filename[:xcol:ycol:scol:block] [filetype options...]h"h$h)h*h0jh2}rB(jjh4]h5]h6]h7]h8]uh;Khh2}r(h6]h7]h5]h4]rUsupported-filetypesrah8]rh auh;KDh}r?(h!X?format used by DBWS (program for Rietveld analysis) and DMPLOT.r@h"j:h)h*h0hnh2}rA(h6]h7]h5]h4]h8]uh;KKh=]rBhOX?format used by DBWS (program for Rietveld analysis) and DMPLOT.rCrD}rE(h!j@h"j>ubaubah0jo ubeubjL )rF}rG(h!X!cpi Sietronics Sieray CPI format h"jh)h*h0jO h2}rH(h6]h7]h5]h4]h8]uh;KOh(h6]UlevelKh4]h5]r?hCaUsourceh*h7]h8]UlineKUtypeUINFOr@uh;KhY~/HSOb0 KfjR hI7k GBgh1[©%U*w.=ǥuyd9@=IV`YF)J2P!IENDB`PKRFGR^+fityk-v1.2.1/_images/fityk-with-tooltip.pngPNG  IHDRGNbsRGBbKGD pHYs+ IDATxwx?WriAh қJ""( "( "QQl4KS4;^]./ܓܖwywv{3(ʨQ@ ,1gAӰaC @ @  9" (1ԮJԺOW}aÄ@ ̛7O8A pEGnهG5o˽^z O @ iRJB#)ͷTJ᫛*;O[n:XY@ ۷o[|yNG () ,FʡS0K*Uz9∪BFp=p=lwF&= fdUxU7̮VI\g'i<7i.=/^6U@ U?Ht2)R'pU)2{P?y:<5=1]Xw.p#ROzE_!:! W } O?m321\t?1'bKpQOI!e|D$a3[el_c ij$c nO]Vஏ˯u50i[Y!vV̟陸PPHwkD ObN`70UuE]@ (a$IW#Iqb୲vK([w&HX;6,5qh*vCScr")f ^|X灌$˸F׎*GYx4G6i *$1Ԥyfϳl$@d,eOUj$ c>%?4㥘|21_n&ίNeHC-J1ܬ@myz/Mc-j?cQCIi n|[!b%@ Q(8bXv*xxz?d ;RT~ tCZ-^r8(/&3gҳ< k|;5~#_|,> I6KFV/kY0ax7IDuF|yg 8~`PRJ2Smʻd/aL WU/71gwb"R2=+OQK;{'>b-SAUW%N4"OutsXWaOش8];RCoJ mPK}Q:5Ƹ3y?j[.8cdzN>ZȚ ۩~OF|cef$$YEsUYFvLHO2ny$&@P(0]۞|cKv^AGQ?ydd˹W0%ƯR]ty '7Rc Hr\'nn6TBJ%i9!mҩ1޿#ANn9l:G1~=3vt|;Iߝ"oBLmMs Y C#ϻs%h4CZlgI>M>uyAl M<<!]ΌfIP65NUz::?pM[Fݭ=b]RMxѴ[hB(N#ݒv* 9Ǟl7ܼ 5Qt*ܼ=Jv* 9GdrUYF-igu *@Pf(O=.?"F q{)8'eYFuX: ]^y#)] [wN8D @T C]svĵkh7gcp[`m]mh}E5rzg{׿?lˆ{g0nqrL{]sңht4 `onI'bBwR̛I+/ wzsN9q>ZUsJ|@gh ӧ<į}Qs/SFGh-=iEk//|8w97ܩ /mFFޚp.;Bw*n&Ԍ0(W ZΧi]iĭgO8n-a vv#;Z磬3 뢑4dI-Gs&RjSm=jt[zc +&٨7&ǶH*~1zR}1eO`zz3>PqI.:/89s!tT~ BU0`=FޕT)BBEg5TjUS R|SoTZ5e}׺}fw|Z"c`tQl8}5%o:=Сj̪4cDz XUMvzGr*4 }MS+IiӼ u@>$j^)I3?CDLdNUdd| GMTiM)Kֲ7YyCƺq}PӎatlȈ#IǓ,wٔO?@L13YALFڼhIv EV&*!I ) (!U'}Qjwv;4m[ F Feh& iFwkώ5 LL>3_$?Lˇ;! 5Aw+Bjl" %V/3d YoYY}U[ou)Kv[}K<)\&bPӆh! 27p\g'$ %amnT=$ r;8IOXuWʳuEFVeu5o I7.dd$T9[]~Q$&*nT ITxf#! e.*hBB=#VUyAK l}ƒ%K7hР}ҥKs<,]4O{2!8rQc!qFvZm!rAIr`Ȳb::@gF3|,\?7M(w~ UZv$q| vX2vlӜƪ.gU4+þ7AơSdڱ&I'6/&{1 ID:~?A)[YYvI'67&-wEfP5Mi!i ' | <) MKJ6wl娡6 ǫ#$פ[uff)eGٹK+^fŻP&<3׸bED٦u(Hmޕ"u,c\G#ICt@ 7PgBJ`mOźN-xv'֢wGޚ]ݧWƼz_sL_to֜3uk07h~'&a]KhAǯu gxB GV^B#1 \ #+9Ɨ@ AY"0 3Qk#Vn r[xtaXRJ:̢_ӯ뷢5r kOjJ#ﶎt3$>tlٝ%-vJ2mt BɓbP+žKih|W>U ܋wv $Po@v糬swiK*h%)hUWwkNLq\ _Fn ?6Nߦyvt]nYCT6y}cAE{GIsOՏRґ\$9$@q{zr̷xX:7G `;H6gK_eW} zn@ ;XlR_햴ls@Z@lo,abH!ݢ-1X;ƗJ @Pv>RgqM'k䔎m{AC(FaÆ{˵jv ưaXH!j/|u214,ξ.bL!!1@B^#!y7YQ+}7ӟ#/zmH5~&RI6*HO|?#r߸ư٧pB-9JG\oIIJ!hWiyzU!)$`a&56d3hт))4 ?/4SH33^߫B ;Tv;mIK%5d3u9ׂ=O .s۬]c #ktIR d72|PR҈Ő;xŜJbb*F%2j;^^1H"(i~xƂyh$u,1 *L-*9cqFqx#,L+y[%I7]Cev#Iɤ wO/5`L!>nSvS"-O3&3C%@PZ̛7y\9!yp2Α#G3g(lAtȍ@VAu<湎s}_/u)z~n]xPU[oG- d8OF_)ñ54F7wk0dhuWo o?w[UB_4d<dS/Ov -M/fvfؚmސʳr-ڭ;a1*//rs SV9E]5_IoXR-Aj7ޞNc){<:;Nc*tQm;nxxϺT 6O!Xo!@P(YK3đ"L̂3i*[ t}w\ R_vK@H/eI\r @ r^[&HdPbEz7T*Hʸ{ib,;㷿Njr'm~^ra>/\ǙsG[8rOź@ W#Nyr;!uY@ +oE9"(I9Ta@ @ '#G@ @.5M @ @  pW@ @F#@ @ ا("!@ ?9"@ ?G@ @ )jL|f6Fٽɽ^>@ @#G 1m@{jDHt2c,h5=J:ޥ;EeUokmM:`"eX_^X 6Pw,{SC$e l trM1jD!fЛ5BvWKGF3gER (SSY-LIA06XtN2<_?p˂@ @ 9~\M/!Z埿NbFBɏ?HJm| =~%dbcOsylxo=K6+lnK *`!gy,+XXp߅8$ZR94 _{es H:kh 7+.%..'Op5sjF~}o:u[~ML!%-3;+9dC)>@ K7Ά>oTԘ:Ѽ1+fh,iY㴨L`P0:ݱN L`: y3]㛮Uh/{+ F~Gd^9>nS3eSmLpnKFj׬Ii@^_C}2uFYtN/C-kZR^Z$HAxSSRP0_fWJnf07lHDƧa<0aYy`Vר)vUSpkyWxqe<&s~XX׷]>~$P6nkP9^߹]b Ƽc,^ݎ& Ѩ<1}~ḙNF\94vXeBb?L @ 8҇Ę`cľ'Wƾ2>~~at;F&`wD|U#ݵovKfs>?}i%ǯ\d ~{uGn&˦}x{xڷ?>LO/:;ͣk˱@1rG򡣎zon懃*ھܟZnjU^9z+NX^8F "@ ܣZ_}'Ou@ͦh~?ZaY+u _;~K*zVϢͷU*1*؈A* R-)&6EQ0Fe_j~:Zc3GCyZG T{h(Ά3))Y8O)vp4 Uڄ{8w1RGR߶Ly{kƭ[h6]( $<(sslqlSD2,ۖ{V]ìZc"Tj̓yT\[ݽr{Y94QsyIV\'A zاH^@yZ9LCROs>sEYilLQ[>8-w&b+?dg|DK/:ʸ@ @p/#y#|n8dc,煴]KNUjbQ=8.bL,v?;QS­Fc~Rzc۫ jN:1hu\ IDATZ<)KJJ1h_WCD3 SxtP{ěrx uwfkhxWAͱ|ӯR!>fAQѭqc5*3/*yI r]iQkx񉅔޺ ӟdBl+[&TLSK~qD @ )wWe=/N6ᥐ#|6{'IjœC׸yzqѺel]:nc~<[,۾:=GP\)Or>ٍUc#6;O_n)9*3kؐ Ұa}+h -'cvcʱ1SDb?=R,i-^HG $N VH*4jC!kX $@QeFyi|TFs.@ =+(V⒐*6:'Y+sNǫЏ~&z5M{S(hBgD{{Cpo$'g*J!YY;o'umx4õ=74乡!c$ILs%d %rˇz}&v_#3Siw Ԯ澣1e$fezAhS.)Lh+C0qy1b 7ػ?zU] #>#>#>#>@P*H^°~/3 >vv|hTѬw11o63Vµ?%'茁xwJv[ؿnM/;ϯ|b=>'lCbw9Μ\-3>@o8mzTQԥ|?ĈBٟщ̟zBCD37KF@J|8WN(()Y13+*A^'r)2ǶM70:ɣX)GaL]>H33w<_'Nrt~g,TH'S*v<˩l5eC 2err¸kbY6:Y`}D@ Q}өZd]M4?2u`42to0^|Ѱ\_!A=54sw4U'>Íжc}ik<1'^!mu?o4;xn}ǯRk~AvͶM]fZ }Mƃc^48燏GUC/9 ?:}^cs7ݟүtj@7z9jE/[KSMʲ6!@ ȗ8⬓m2" 0F$HRLoJj*8A1 4_,(6D @ %I8mZf\OT ))hQ2,#ɲ 9jD߾me 1-H`8qb@3Q(( H A F,pYQk4 gb#s͑lH uJ$: 9rgċN7%CQH#A()Dq!@ HMN&22G#/Gez=uգJ{z {(dyp*zߝ)hH"өSg1LY]] Ǖ$8QWcHOZ5K.]R*J8_dl5GG8>B]= S{7t\DˆȑhgbA8m\Kr,v(T|z6Z%xq℻ELnݼA*9c_xb"I]w&-έGSڴm,t҅ R\9, ofϞ=4h]zÇЪu;RSKѷ@p-\"%SϗlJ]be8' n>9o.M+|o!Bfhѣtҕa&/tVjk I;+j UO1qj)Y9S@Pqȹ(O<5 ={c2ذnmb8֑ʷ%(TVK)y7hڼU|g&bhgftMt18Iՙldℋ;9![кuky_K@ر#˖-j\x6dF:} wK(bp$G"aĜأ w;h\+WNӨԶ1&<驅Mqeɓ'|p>`ٳg-[,r !ؘnøǍ.fx53ZkڨY]Ù8V&Z1*Wk~h4;zo))7׹YRZ˗X 6ٳțSf6{֯[ˬ!1!"6r~%8RޥNh5h%s l}|7uĶ- Q(slq߆Y&Ehp̘s\@!qJ0aP2OF4o2߱VZu.^8_[a4j܄Gy{ wwwt:^^^t:j5$=z4T\+/UW͛Ԕ4=FxR&LXd[6Yl$Zn윏)51ONAY,_hU~6Ӓ3&ITp?KyQ$'g2JbbbļǗO&q=%}?eÝU*KJ *nLM!G1jqq?Ųt1t>CǢУW_0HrbX*~.ܿ[d\S@mJD܈X*ϵ^O _~Jtt4Ϝv/go(=osԬμK%v.%i@qā^&f9#|~+H8v[~vgۖب4)Suzk*u%[´iӘ6mZ+:GQ#G$?Ɍ&N(\gJUw&ҹ9{{ohԘ֭[ӯ_?<==EQX,j<==aСDFFZ W\.w<|HĂڗ8g>a"7z_6w9./ >LqŋyYp! `ŊՋ6mJf-ؿwwB~4٥Kآ^\hH*%|m_ VǿDݦ;Ic`#}|wQE>qWҟ GIh4h4dYDQgF#&Lw&39p =Z${:wl߷dwپbO޽ۗիW=Aၯ/Hd_tq0xzzRzuγ>z im޼9cF#Νc_`ۃDt SW@Z*VkNܹHեXWƱc/,&ix;ؾ.^^QD (;:.JU8һ-DqLfqcmO|'zAz~S!CgСȲ̐!CP!C`64h#GsNݛ%|F\j3*Xvo-:8/sqmͨ@Jb@} ӮزX-q2y2D3 6䥘et&Z}./IEQPTY:·c08sm;;wرc pɔcg8c˲ly_>۷/Q{*T[ouqfb̘1ꟺӷo_^6@ƣM0QFу`n޸R)) /@pp0>>ֺ:ۥVÔm[rr2~~~YGW^t:~W#GJhZ>Ύkj\zde_ͩy,W7"X47gaYlԙ-g]y,C;EwK&Em[EuoȲLV/k?Gpa6n܈?y}n:[[(nh04KM#~gFk=c]玁<=sbK|}.k)R9E鱄 k#@vܙQha(E^"yPgFR;ͦ |Ҭ<}}cŠML-'￧q.mg5o7Dt;/ բ?@Qr_._LB|,BrJj'L[VTq$f[:} eT҅ T[t6$===ET!աS `o,C94[jMjj*GpIfz:ȑ0aEV\eϣ x]&$$nݺaÆb͋mm$s~N:ufo.UWϋf@h籘 ~7&ܬ yc>I;Km-lDžvR2StCeN$uW^eMM uZFefӿ~ 'y"n?#&{a=iuЗMGypdGx $cO77Ij[<|M{$6<<@LL <ׯϿ@pruJpE[DIrօ] )4~7g`}IBٲu6+y1aG/Gq_ҚOXGUVX%OAYCv)8S<`<ÊU nk{{{ۇgo<7>?1?[qM\ ,%n8^0纚g}(ݾ}{u/CW$:l6Sr,欣,fcU8vns8=C a۶mtСbq'Cl۶=7Æ ~xjذ!FرcLhh(Z._-l[6ȱ-mbѣ>,7)&^$ Gw3/>z ;v`0pg9|0?C#4hPw?ocšT}^5{nQ_cº)׋z1al:7\w:v߿YI9҂}n!1xUz/9>KVn(SP(vniJ:u׸ϼf3*ɜfUqѹzvZM~|){x'Ɠč<օ-wfzxը[wIs9QV{SV]12v>Zn;del?ZUcVԓh{=k<ۮxX:]F0J GL<&OL=8x`ҍr4pjϢط5pƽGpU=ekkbMP #DkW3[[sty~ 7vΧB9/V}Ae,oI( iiUzܘL&BCCqssq<{N M9t`_i;„;;WG;36V3Ͷ u͛7~jP5mƶG\lL?p- zKF}2VwkK,h4%\;[gBDw=vbٲem۶mc۶m̝;77n܈jO6g3b/s_}$ѳgOT*{&&&Xc렠 R/]$t:fVkicX0FL&. N%ݩ 󗾙΢(p5IHHuhZ_q1{EYY>hݩ;UnlAZǚp2WaQN-Ӵys>fbyp$[.MS&'vm*KQE'=k7bC`ў_lŷb[-B2칺Ow|Eu%R8(8/7u\>מWoٰaXu'oufZu\kф>Fd (/-y7@rS 4#0hԙ*;Ǿ} hQP1l| Cbоb:G 8;3sgHo7V͇C>QK?>ݍWM}#H-N%¯/\~ek[XK}+?>[31_ہ}~}0ßg}Lś+as봚gLQ\>KYYM43fX`Ĉxzz2i$}PذMmu#-]ϒ3,y5]l" {`oo;}|r ׏:qw넏3gLeķ6_4:712ɾ:${*4%(6n':7]q` Ijck;a(bwdždYѾyp{`/xjԻ4=}}{)/u)'xRq IDATC*fs'uN#J?BRq ٓ9ٳg '=%ԫ֑|-[$,,Ç?M||@W j9||ҏ[ÁY3(=p'66Eӈ 8aaEJ4 fقRTT:}gLa$((5:#YBK)?EQqLJ,zWi5 u%b|s*P^{}'U`cY j["5 WW"Қ<34FO0sn2UCC0m-"?5HzVr/LSz^gg5ny3׸*U#Ϟ! ,wzj0bWbJčȋ\4f> z,s-m}%~[Vy`^Xs{CEblRޭS:f'~~q~?s#Ƃ!իoA#{tNS%/^bŊ,GuX,L&f~&85Ւŋ\&L余3UɎMq# ˒WSf--6jլG0nСC'V_?bSm6r$66_Ȑ!C$e˖9AaX㏋3i6ľNCQL&S{ⲧy3!Cжm[ׯC=;IIIx/$I"!!JoŞuq1}]mV w 5 E?&=}Cҵ_QyT!-%e /Ax@$L&_;>n6=! zh ,(XX(ĂQ| H @ }f7Kz|>̹̽3ss ]okGSw+?=E1tP:uDf8HNN۷o6ΜΠglX;SdE7Ɯ3#ºя'~:߶3o<O*۳眈#z̬G\"^Ǿ GƴlلfЄ NQտ^qi<t_TԞ+ $Uy868 u-{͵Ɓڨێ\|sKxb1P:P AnLׇ35:u UUX,tA\ەOW_ꏃ…\1thoٲm(rn ܫ Dk"ݝ>֭⚫rF4A ٝ]x+ǖNc-l氮-Ou(Vn}vm?hWy-g $=9_~c/0E`YJ^l.)\[לk<֔.*8{kZ&X~=_8-^QO9syhy?{u˖D|zϯd-qDUU|^}' Vs S;6hvh"."Ơ^ l4ZV1YZ[FfY{'+1sۗ_|>*\necc.bE=;aw' {P~[GGpNxķ5C0ݎNby9{jxkUCM<}vQEaϗ_~g}ƚ5kh׮f|[.x_YK.[o)89&jĻ fƨaa􋻎#bpiڵs2DS|>=Ctj`#uyZ$11Fd>яݻ4cJIގ~~~~ǥXl"őZ4NIM=<Eh-sv6]C)h]ո>jCT~QQ{>u~\%؟\2&0*hmb"C6qgrOwmߵk0fE T*lGè@^Z]v%۔/n$=]b1` h4( u&)c>ӓ*vlj:?7nH󉊊w^FTUu }2d;t&a{a*U%u+FTC,ً@} 4%:P >skp%^ U&/":XoFT`ٌMT;Nb3zjƬa0 Ujb6ӵdmy/lC@3fkim4l,V;*V=+*WW%eZWgҞmb}}MGYhaq8jxIrJNHѣܙ֭[be.q*ыݞ!Cؤg4H밡 Pm{#4krssXjCFnnN ݦzf~gFIVZFqX,7_CKa*9;C(f#vO*)KvO:[Tkʺ ֡|>cn:ΜɤADd^gQ>}ycPݎi=Yf( wu!ǹVU6y\~}1Kq|-ÇҤi3=ƍ#..%Kп|}a-Vez}mpgɒ%qt޽Fqvw 58d>)ұ?0rHP3g^#Gp/5%ZYޠAw5pQ+xŨJ\\z$O?DvGO\f3)BČ(Oq{GϜ9FkV~۟ysҨ;-rwƔӡ TЬr`k,6|`ʔ)7aw#i'VUa[C`w|ƛ)"Su=S0fРAm6,V ˖-EߍԔV+5!9:t PjCi;vqMG:5IK~5rC '#e%%W%L0t%V[˦&踟la_F}MظM,/.uXfM]zt -~Hn|{(ጘ~1A<w!־U{"o&MCt: L+nn~˯~Nmϧ#ˆyCVbٿǏ $4W^ˡ16f77?V-s-7vzOT09={U{@ZBGZW^ba/V(ukVo@^{5}]F#&'9 377W6l+/T%\Gy!, [YJR֝ ɬO5k,iǏW@RQUU]r 999s)Fv1i*e\{F#ݻwW^zSo:q63qDV+9995jyG]ñNW͝;XaIII@a?NƍٷoM4q8y$pԩAn5iz U[9;{gڰYm.j͚5׏{7Wڞ-,#:~Gl/FuAԊיUl\/]x dMt:FR EgXHZ|t&Ϧ9.xX|zMzzk>b @|Ba1-5膱(W@V7kK#2-l{ 7ʀL*=0KĪ?2{6a@Pޙ]O/vM!^7M%0cl0|p>Ād2;Z?ħ]dh:2i«!>wl+KzFWsyCmӉpÇ`4ғb5;o aήS2bu0zhfxS;l U{eF6m\=z{4iC.GҥKgKn^ciE˫\IغzhdM riԎ_Cj8~X ǵ_xޱ'N~w?Y~+0qD|||0 7oFs ^^3gdn5E}l>~ĴɏĽو\ZK*uv]{o?pE{~w짖E^*F~.SaO?q(6>4-ʴixq =ǹپ};'WMg6+aOE8z$eOyUdOqdeeU=Ӓo$"1V{,0cƍݻu-@yϿG_<wp}*Cdd$wt _C !::8Vh]i[˛揤9哸5 `6ݱXm-ΜdΫ+k@ǎԑ핶(Gls=1e=RbޡrJ٣JFV: @$buBծmhhXMfS C!'pH텍Ȑz!dfuG@(>- _TiM-;Ci2Y5Q~í h2ͅ|$&^ۙC )! O>qpYWlψG'p3)qp\Y|ÚoC[a(t'Cs? }1N*tEXX>NJykREr8t aż+d|Ddϡ tz13N1o0RU*N{-\P=O=]]Lm0A~B;)Ѳu7oD`/GPV7s*4McՊdhNX,޽Yfc~*W>@.T(,RQ4iK it>ocDe8y4h]nnM@ĞLئ#D7lTsxn̹C"̞".1L6v>}zXzK$)NnH0ZU5P}> cS w88>EwU{`gg*WCip)݉ +ޗ'~J\ }Vq߬vو5S\?()>Vr[~%m(' gJ ;3goy]|t/^k|_}K{/:E]<[ң+w˗C]W hG>߫e>6oT(>+wX7FuM44*(o6 ᎑r%T{vn/xQ<3D,}Ȥ8iQZ4ӏqqK<ӪԯbSa^nDT4W<9%oel޼6:3y*]c׼V5jDvv6l?.K{4hQ# b1a6[ NaW^nwAQ-Uɂb%ps~[ Ke:nW@իWӯ_?ϟ'~[eN3FuΝ;H%mQqCFA)dga-,~A! 7y걇+gOjdgfߩюEq٥Xx1DFFһw/z+ȐGZ:Bpԫ=_0 @ -.MS0궢t2Ul[}wZj3'ѽ[gX֭]"jerK >?TTĞuw #Ue T8Fa5f.l0_Iɹ|O\JqiҞ~HM-hV+,#O)i g0|zې|h!]LP1=1Fn1 B:1]lJ5vDFEu~^_Kvesɓ1[R6ǏV"@V*lyǬD7<F͛S$6&#HJa@S]|Q̝mtwząjaL[wcD-Elv;qL6 ;1T8*jύ#s)TYaڪXmVv3/o_IrƗL=vVrD39d^pUkxw;\XLvADF7/͊^k*JSH;!/\}phbW(Rm3#e#,RUʓ[U<֔z:tӬ]ܼ||ݟ0~] ϟoB#/ߧN1meIj+qc7̆]>/cɬ\uѧߥ]Ua=B;Rng}Ͻ|AR ;/e8>k׆{-v;"Tޘ#TumNƏѣG9tPԈNs3wyGE}iV+~~~DMƻhDu SLyfc fvL`;D^/X: %pJ$,,#ӧOWʖo`UZ,KYHDF1,p${EQ=@ IDATl ,K뜤W=gS9dDc9L'ҰٔOXx"lBUX|T U?ߚ5qZu?ܩ^"rrr7MYԜ3mU#ɧm.Л+ו\PA=P∳9q|sȗ_99v _~u cYr} ,?@ӦM9tPӶ)5MՓ7!֮[w>'Nv9}=1Ln1aѩh޸5#wlVsλS~HHRnHҨW#Q fEm68o盟Ir8FF7t uy#*8O܂Fhe~1%?8v W.СCg+ ^ =W꾕92?ܸJ*A9čQ]wxޠ~t۷n.QFnD4&{Ğʖsࡥ?{|!2o K *?ϭw=LG \rssyd\4 ȁ f۶UfV,>>T*c38o #*eӮ)U~T=Q I,G)o%iJ_Kʛ6@9_ObΥv۳q.ѓȨr&jrq6mH||<Rђmˊ 8zh~/?_~=P(i&Lg&S3ZgYǟ!ekOqd{}' KoߺwjQ8)ѧiwI8zZmK5:HrRYYYu$t:hӶ QQQlΨ;U**˯{'j2#8881"J@JJ %?/OUm@AAʊiX.o( FQQqDIVSXS~>w&Wj(nUYC=ǂ  Ԫ2>F_|:` T'q˩+BXx8I7$ g@h75bjij^.|SΌ*$"y#   'TxB^Oǎظڵk/jAڿVъ83Ӽy l6yBBHEίѥGqO+   T G qm?֑qĀXi]>KlEQya6&kA_ɂ   BPs,f3Mh5&^_1 |Mʴݦi*6 S#EQBTkK5AAA0T6\rsǺeJ8-rP!   u 8oߞ{#P_K7b kA]Ǟ>yAAAk\C&7j nݗӄmR߂  TV8kjekr*3zƑ!\?4 .P~5 p6r75(yyt%nǢ(@:oa2)7V+( z=*_U}^Mfl6|4 sחd ekGG{>/&a6Mâ(18b4ON*hf2Q`Ɲ|iR |rIN\̈́d ,qWAAlMN˿ս4@ӟUb^99Z*P|G2鐟_ظ4X,4XDN[h6YY46YvVL&.+`fF\6-0ʏ+n皌 B N4hhV&?FDxlod6s3{L48Pl:&efb#f# S3ׄAA[b]:u$4& 5 6qD#a6a%4z{䔘L<<CΜA)lpIv66`G $}FUOSڻff3CϜᯰb{pFJ}^SAnv2cqTkW$+3S*E!8$qmس;YUFEFEC: N0 +ffeZ,mm] u_UL~??6h9/yy9GHƸ*$((:M1*gf:kBC9f4V+}hP jX,ęL |n4.#LJS0T{13 PG܁n]D'=fDUUO`捨v;%*6oDq:XXkCBh}IzX .R{p֒n y 8j4^=l5!!*L&@<6Wî((v]\n7YRm^nǟn00/<g]gsppȹ  u^zZgMOߏ,]NN_mw`Or##A[̜"zpX^=n sŶj4QYRFZrӬ ᤏO7sR˨o^0>oGBPK)   : +Ym|W\W9-8Fs=X'#Ny5ClUX`Z,V+7:1aW|C ^H-&8' B-~0ցjP˞ "EQ4MUN BV}~bVU6~}9C[ýB#dVV,^S9yf p~WZp+" VYQs5 Kuƴf-4ӠM&丂#) ţ'×XkI ]QйmѴrIm  Ƞsč E%7V4s%Qj$+ęRz(VВ8__z-h<8{LbTt:#VGqf p?@SUTM}vKc\A־rOjPw/GgYO{s^^DKEQ] 8UE99=).tyR̬4Q' ^ZA@r/Y٠!cWeW,}%g@VYʶ8Y/AqMł^間S   (__TZEvK#^Gra5&!!\Z!/yyŦYLrϏHxem^->6 .v+3fӧLdbP}~ח75Ϛ8jAAHExS *GJC=w|֟7o6}Lt( ̷b!rN=~>>rG/11gS.ju$ ]mʐv{/0gӖDRl b}p0e_P[},416Oj E.ESK_'W3߸/~QԔw~Jbf ]x?3;HaMvIiJew#0kFIjq`;Wg燰:Oˁ&%"թ#>~/^sDZ/0 య/1gf@9ד΀rztͥDݎVȎn=y Cn.-fBl68☜6΀"n dhl6bc4Y#[縏y롲>t D\~> V|5 ׳ߟ^%P'0K.Aƃa) B{*?u=Ĭ[w}9>cyYq^{Mg;% y+3z_Wof8"屭4A]j#©}'7CzCpw}VW]e˾Bj );Ѵ4ǩQfX:)|]rz618B6Zu:6%`̖ ;ʬݵ( {[x=0OA^iK{K35n4w? ljw&k/`΄Hz/-ƿK1[㙰~:A_`t;^Z?KmĽ ^'tP7l. fm盩]s;S^}||O;ՠ |0;쯃c'h_0'/{e|6؟<䯖t!^z+Dm_4>).]ofOIyZc>೵r3rUc|\,!za=)7/N㮋ꡯ.  #{ɋpy@׺h| n՜zAAydfi+ᶔPW_"^;!+NP +{=,z:+~Ư,]_>Y8#q;^"!-̛47:!;K/ߖ3=~իXE+gAi(v}sK(nCBWsܽ9Mhs/G8chBiAqPyqDh 7Ɲ௹{1iɖ֣I`4_ڍi&OOٓ_xCQ(:SY0xnZラ ?.yb ˝o>[8-ǿ} ݚ+/A HPcA7nss $ƍ pA#.բ|cesCc.G/_>k+ &XIwM VjwUzZK؊hvVc a PmV*͊jC|h"řFl3pHkؼ˷۰kykv:k6Ќ1-} Ӈ%<{20+|]a/ӧ >s8Zδ3YK˒3 '+iцnikeCOE- [_4M?ahBRq B]@z .=DEwA"…/>j^<-7?LŠOTvcXQMg^ 4i'ejv;9()a)W#u if񞂸\=UȼVo~?>Kϰi=cjtD AɅ73[~eқaXʔ?%ij۷oc ջ1/[>,s?5M׉W%m˂ZS  # B)$$$A NQR]cF4]ưЁkx#}{&tQL+[Nǯ%\OA?iz'=A6hyCKKS/pQyyYI+!:c4Q|GChXcbm0Fw1Y'׵v"4BWJ>V}sS3_D _6s۬ $Yqm}h^L[|W<ٴ,=OSm,:/6BS`K>Z*/Aa5 B (`$By0.T~?u;OF'}C%G q&cJGن(D^$1jJD )x|0zDFs݃Z܏lyj]4Z$^IGבϽmhv˟!~kޭ:t_d~=Bt]q B]@4M0aWo q1Et!$$$R@)YmAj+V8kW½FaZj׵pinRed{b]#+]{Nʞ4{=F# qѵk<7( a 1!Q%cXRTb(c YYsD9"Ա{@ApG_ x#  4_ YDAAZA "  BfVڝsTX0)GB\4 5# B# \Ylm̝Rq)?t,jGA;Aj1M v:'9I!("  VU ї`DjGAA7'B q$:EQPUU"("  B1X,Za+ R_P tA8  …AH0VA4Ml R_B@AAAb %GA:H A(kPl R_B@A:# iJon % $ P!$( uQXԢe #S6׶E,.m5-i??3KR*Js8yaU>rk_e)Uue y+(mYf-k,ۇB`m1-w}gvձMA~E PuRӊ\ ES#!}[k)[Y~ݨ#i~v$2zW`Y3I:_F;{,*6"jW IDATUF.80ٌؗߎ`m}- : `~*մMAxLEfA(I)zAOqi,%k=@~|tgIkeasVt)Vb=Mt?!V'~IC|1"K,]5&P)"?Վ)75]͠ &(mvѵ>=_# &4[?fŎt͇LeI[aykLPP01=FS6ե,VU%8K{K8j@%h6*`l2SZ.INFa m B $" E)-7kp/LhڗbCvz=1lkxr][^Xmk>ϸul˫CxAax?kLP|oDُg_7,~TJ;Ƽ=yt4C. ;ޟAwY^ﺙGMCWqG >8{^J3XU_ي~ȎktIf\?ؤ8b@9}so_ctPtOfd"vhe   O/m~buG"nMjMNWgSK>Iȭ_dlIdgC olNd{} m &}̧4LQH(Kד0[Yj<;"&ޣyu.CR^a>!3tl׋۟KLzv#yvZ [_ z۴#W>6Ŭ'8"Pwđ@0֏g3{8NAAty6$LLƝV+!ɧaO.83אo81M1oM"x \:lF& q퍡,XU+Wj*~ \VKHh=3EIxQdẾH\ne vWdt/(7df!Tb/j!!tkTPB"Cؓ{EKy1DFir k*߮]z򓘻( N; .S iJ!)4RsUհMA8pXUpbX^Yjbшn|ձbT@f`#v 4RInSAD}؋׃z~ah۾=ix;4'@62 Rʭ_-)a{*VN6)GǹcA v1g:=F"NEK3X=|:;&Ē%syS_]  y"hĎ|Qtm>jA\} 톽o3ήVc;޿fRq,hvhJmlv 4I"tUr3Znў&ZES#ᘛ.\AKQ.j9s670{SVG C)L[~+r[_舯kh   Լ8RJSSn:(#'~i ٟLV3߸rxMJQ46{. ߥBjp!Ai;K!v2-5LƶI[vhub=i0OE_or+tl;Ũydxc}{vCXlڽ!7/WKآ[ZUoG`PcXBԺUpp77[m:]y*YCKTV m~j,j1^פ>ŷm5],"ſ^Yտ_S]#OO#Ůvх/(%ݧ(5;ܡuZ7'@p8|&83(|ߑ^2 (,G HQV8RIuoY;{NGRTBb-JjǪ=qh=F]Ū,{f5˒ono =!K9%zp!:Tq,+^Q$ɪփV"v8$ ?!mUXFe5 I2\r:ϫU 6sut׻:%uĞL[ ٢TגE':,ǵ7':"ryZp.,y,r\K p _se\GE+8WuPƅ` 58L QjjX9kS@U# Ah{}+5: #>S`.+B8}7(g@p!xZ ∼\*'<H*8r apXG@P#ApPd9)Tj Ngd*p5G@P#Ap5G@P#X3E)Δc~^#Yp^"Gu(1$Y }Pj#  *ّ\g&8 DFF8j#jp$L"P LX2F8j# F8j#jp$L"PF8'(3EG2j# F8j# F8VG*59TG@PSX#h9ŃT# F8ŦNfjaP 6@ F@s8$ @ E8'3E#Ap5ԘFP|9rr-GNFtL@ B8} Cڥ1钤ZFX,T+VKE@M~ P7ڥ=ʃ_nܘʑF`T-F gj..۳GYCeA}42#C=rrD'(# % ۷'3#YNg 'p>(#.EuD|~=G߾u&V:D/7lWݮ4]կW5bLÑLE@`Q7hmqdqXG]%r4^Æ=+RMP#yV=߸Egt7f@rpR>yGx#HOњRz(uuաY-~jŝzzWK )*$1I1V*m~dlQz5jE5SV3H5Y3}>MOLWGV2vԯ11>.N_%YYjXG6vjIt׭aaeU^N;p@rrԢ@unzͶٴ+4T##SL~QF #9͍՝-[*әp:*Qa(nך͍ӷ:!}u(?%nזP9slEDTw&֙s~{a(nְ0((>{'|8t:> 9+*: NyZR[U`lz*.SK]. Mv֕{*0n}^TMiH4hP_۰A<^c^NKӆ0=ܢVEV_AkhFnݹSyg߯nukmo4i): 8PGܡW /כ\rmI \}u)Zq8%|uMvIAumnzt6O ![ZCM @, Fv TVAU|Uz ͙:=/4ibt}~UL|{uiAטygǎJTRznv붝;@2W|گ^n;}?WǺouDDE)fS#[ct޽~o!izݺ^v˥sHz2"B"#53!A)QQ|U>ZkDF9ީ:u,+>__)QQam~&٣tqqr_VDD gtl6|jrc^FfdoVV}߯fVG"^]g{EbLLԆ0hHf.KMUhwzaC -q#^#R7n]ְ0ܸl6ݴkWi\$$1<\O5mйiiEm\J7]ޮ]96VDEiETvb-!:Vog7ևY<*JlW7lPbaOj,eWhM#"1"B&$hdz&mZ$@J:=3S1nYff[b-ZhV||e#"zDZML}P.Hә"p5*Yf{>p0RاuXA;P3iQK{X4^٦ʘXKH ?J6..D0Rʨ(Ms{֠.P8H P@l(4rtzf99jn"|R qO㤄Yg"ZUxUbQKRS#?H-gm=K޹SC23d(85+T1hSOK5LWԽ تNT#ACn^ٰA x?}K\?TT%-ar%LNP{qxƍ FP $-xJ' $l7L4ORAT;㆜h:#$ȾZ0vJR V& n5AK,[iiyd(f;܅řBa\%i?>"B͊443Sˢor`CxʲWdXvM6`϶d1 5pcm|jefXN h *`Zw57. I TjQC~CK6Ð0T֐Lqc JܼYT0u^Ʀutώ%ɷXc9Bbu9;>^łk]:/Oa>|>u}۶-[Jb#X$n߮323U0Tw"Ńh9vE!٣k - ,` P?-2IݺJ3ndSu%v>[W.0t=6qzN}%,LQR7ocHә"#@@ˑ &gH+"#JFb^kP*\zaR: p$_Wb6IoR,ԭ-[U :a^EZo֭-4~^=*u jb/iH[֞V?>N"$elzaC]ٶҏR_&$X~ Ex2ɮO ];=Jm֭SPs DFȃ 22Rtqii+Uժ=!!Zccsl^]k߯xGi!!.>^$&tU6w*fSݮՑZ`Kjv}joH~՛ >n׃-Z tfFzdg+@1$ݮaaZoaǦp]оLO./O^|UivϣL! '‘c\#ϱa~D IDAT2˰DfzY*/oyTԟUٰ,c<kJcTTժ/uǖ'X!-\xunnᇥ3?_q4qT%&J87Zpf>(=ԑOҐ!Yg-kfJi ߤ1kZzƎF a4eK+q GhF+@_#m,}gUi"`;ғO? x_\Zw5W_6-9Z.KM5_+VIfңJ&}!C@ğC/7N{,}t]Utyz$%*jfNS#޽jx1u`ğ3k[|)mt%}yU*VoZ29bPA#@måT~tuUw^nlR{LzuÇ-eÇtJ+Wy[噡Ky,FI]*pmf,ÇK-[V͹C喪9s.,v/ /_W.2+VHsV]P #HәBE@E⮻1[$~}m /˛5x.ans4}ٍ,a.Ҽ fۥ>+y~:F26ٷ,f`R4l=SN1ty7F~]}xf}*Yڦyss@žyF.\(-XPrJ'EE]ިt櫬q~AZn̠#.&MsΑƍ. J : hsgu`Stt飏/~}spbb̠wosn+W6С*FŜ9TS>9Eu*(Hf1mZ`<7(y-UR"}z5bǼ첒ˊ\Gs#@5!j{5-̮-b?\rwK!!;\֧Rj۶~U9(k"4[sp'$,k||u*Ku9S̳iiK/I]ZndwؾNq7m22EoN:䲽{K.۱leҪt_Hk֘c5Oyڱ#}QÆf gR.f  t_ήziܸQrY9%9mSՄpvۥ[wޑ 1,kرjc3CUSo_e s֛T@-G8vWHgAɽJaaE=ۜ2J.[eS7hlE-^\rYӦG?k?@8H76gqӒyr7 /T?>u9eJeyo.]nHn@E8.ls˾Vq g)~ں3 ᇥ,n#׭+~<骫]͖6"m\1r#7G**P7ǽpQG馒5sJ ;Ϝ2xsL\wK|?)_Mrr.*cr׸e4mيͺ(cmsscfdH)Գ4iR}z :_]ٵ1_;wxF_L@ ` C TγJVI+ѩ4f%׭\)v[Ŏ$]~yn?>LV3fHD)k3b1+ּD6i`4kH}}3Z@-tHe/@9WT/,իW3RV۷@:zGـ ;*Pa#@msg`+M͖#f8s6m*e-b?%uWZ˒w8GfܸSʖnnU9ࠕu)Ғ%Сm_N`۵jeN |xyZ?m~۶[7sى/Ҩ݋>}?o3sɎ"]iki 8n"gI))Ү]R~nf@%%{,@iiઉf0p9{K76Vz5s>~ds԰0J˖R҈g%}e:vs|Ds*Yi vfzd i~)" Mz2;֬G@aCTE#Ho*&4TBUYQ}{6_U}fͤ6_q}Ç2bb;0_eWO2|U=PntAp5GǕÑ,'8"ZL^*A8j# F8j# ;#YNg pj3EG2TG@P#Ap5G@P#ApP#8r:Ss#P8)r8 F8j# @-rp&ftF81d9icpjdG IBT ;UPh9j# F8Fq8tP8fGp:S`_ZF8j# F8q8tP8& Gl7ϋiѢsW{h:^gQ?ΞoߺU}s'3EG2T{~]B/YQ>y/װacuϲzT:jPf8MS?.ڨ^pTDH m~-3r櫯Yg8&PuYu|9TPPc$8SH@˜#}TB5Y0' 1J9=-GSFxh9*6pcjUk8 ̛3[a%ؠ[ n5Hf:cb~6k * (hϥJMM-s[ժDuSIIIT+\~we, @SG7oү ꌡCղekl6> Ð!C|ou٣_."hD%⸡[ jܹ:餓Ԯ]YVy=y<n].)//WZjР4o*N j3k@xX,& z52=[#\GnZA_?n[=:$F.]vE8rNS}i׽u飇VwM=޹]nV{vjޤjmnuyϻw?$շ[dXT`:GgbhUv=QDuVט.<|pu}vCՄ9 tyYOE_1sAk+orЀI2k #Un5F<>~ߧ"]_f=KcJG[9_gNܠ!oU)薨xCZ@|饣NzZ5.SS5ZO,xkuZ"+ur?Q#vI OS'\?5aڱ}[BX"@ [MVtf}[^A?G?SO=%YqWKO;|R'oyS,:pjwúzPiK<lM7sozWW>[߾QC _hr0uu}$խ}u':/s^ȡV,Hzzpmn#7tvȖC|I.wc:Z6 XdI\ s+ջQ#$Q~Yk.Qj֥zaNms֪ț55<"_+_D}[-r,y9<yɝ.lָlfǭuOwUH=J)tj#s΋yguyi`d);ũ I$ |M U)n5G҄{+*}WubQtv: R鯚wk0u?ް_@nmx,u,? oQigSn ->@t;xDz1Qn^A[#ZTgdeiݫ%gjw_rn[Y:4zYMRJ=u\Z gj3=9c.Ϭ0dSKNmmߡM/4qt Yoݛ>+cuM` >e?7kռǕ}"eK/M_.xWZy~9hk_!J7AwN״ՇCtY|}i0J689K7I]׾,NO΁ bPsoՐ?5sum=fozMJ2P]1ZI彳ZZpn`})Ǎj°jۢ:RHCmZcevxSPc5NM92_yw}G;*U^ϼ_!wO!:zc\~zFKdígCwKg}pK8wk z6j$D-z>Dur$h_:۲D-5[k iOg5tU΍u8rQ|xTWlܠohY~w.Zɑէ׹ ̮1F~̴HiIczR7ט ݴiZ/ <\},RZ^\6_-nƛ i3zdZ$5i0pڭUWٻc EOąլe:SMhٯc=ڒ!7(e3Mհ=5y.yMݒ8O}gW~{mؑesdvGWnoCGb8Qڜ$'遅b,M?<|y YdȕR|2-;eJiQBEƟRq(pТҔFuz)Xˏ ~n*@a*b=^M}O”4ht Fһ_mBkZo"exlG O6U4OXRʵGU{7}U:%k/ @8"VYSןYvi3JBV{k-Ż45A85I mKZ5gWK_Վ闪Їπzy+ab}uznS8cZKnvեbI.e?srn@뷮O\GW:,9ҥYo6.Z^N7*cԮs{/=[Y)'?szWZn.B%?#^F_mt %r,޳)a7ї?[rVOZvz_ai򌿴a9ggmϵD#ꮽܬ;Ո(s4Xͺ\gf]^VMYU )_)G߿>ep4@U xhМ+tex>\-0]=1uropjokv)tN|Em:֥S-zf@@҇ߟPub:/ipXG=2sj{Ni7RrDEj?N&>SW,G& ίn-դI[ wPI^Ιz_Jծo_\t|f#*Q&֫֊oVVŚ-дK\z{9 )OQJE?1kmjC^ÐkHP+ܐ<W#P:LQ2$FSzqɺu1]O\B=2Yy}|>? <0/?"ؘ)&jBh=@)5K #:V8 T[ E!21HQL *UIW'`Z”fyzY5.&QϮ2jMdXdY* "#P$; FܭH'-X_EQ0b5&QA+Ҏ IDAT٤'j觩2cx6OE׍ӌJ5Uш ǨkUl UՆ T 蔯[ES_*ВjYWQAX񦎺_vւ2V ֺ\'K *R'PkYWػxjY5-GtۭƞN=zW. Ez}rjm8IzZ&tkC#)>"[B]&%KԷuZ@=/"g?Ǧj6X4JO?_.~ ܯ)Ӵx o>N/wR"Kk|EյZdDлVW5_á2^7kq|j?07͘3cEG/n5_4yTkEX,=YNݠ+gޑ3uv\}.w92,vu{b\jRωV)?w⊴`jVwc:Z6 XdIX?~HAR5lxY_}G1Ɨ7 YiS#/ԇ=ƻv-՚gӫ{||rY;)Z5q%qF߳HGFpiꡯc4EZ] .Tɭ vUu}25>gW4}6e6I)yu 8TO6i?nIZJY" ʗfC#;DX¡N}təzh`d6ξC)w,C]-ιQR?)9}s_яQa@.z߿H^w;*uo9 x)Sc5zAוt- ;*uiCB4@r|*ضD-uGíBSZ&S^s e o̕{~:I;S)jxF_5S|ۖhRN9lZ_Cn*eito4Df=[*:-<ju>NyK7>W獗g(g35 -Gtۭ#uhv* [o+`wCuD,G2dȐ/+M;IF3Jƌj+OzEXe/H \e*]V6WASD)eEPNq .;+ouoGC%K4sEzmb*End+[Cb=G€4^G|U5TE9-V긼9MMPs 'u~jK*䮭jnu:ԋQJ2`~ @(]X^J2j#w_ƫ[ =JѪ#bWz?F^~~MQ]*Tް=ؤ?l_y<΋ּ+R+/Qc*U28ymJ<)i.HWrltPw59G/լ+l%nՔUGcBvSK}e(ge̜G/W;_~CR?Wz“c:YsK\um\!-onU-ௌOS5:׭ރHu:v|v*8>(US}Os yk/j}"|Ūz~m']sAq}ccԮs{/=쾁׮Fchi醯wS2Y\3K#vLf&hؔE8͸Oj]*)@0^o:Jkmpll%ګL>pjokD vTۻ\&4ƺ?SS۫uxMQ_|# e3{I!)ɢg?{Eշq-B衄$ R  Aǂ(6DU(k!gs]s%;̙s~{ծJ="og1<$jMngeЭ,C:=ʭay]"1At;.۞ N 5yI9zwMɭyGw[|ÅNHg2 >|8+WTn! 4ҳ' FB|Nysf3h0eV:%ab갭lxan6wvZB]/q) Ӿ{oOⓝazuvAʾY_f#>>KvF&N =FDDrccFe=F*k{g`h8㈎˜}4kY`)IB1~=R{3wͼŕPO@)F6Fm$B%)RVs 瞼dӘv]5;>d#qLWc~BL]g\r2?$T#]E6|=$ز:H9YEDDDSOC)vQV#"")8"""FDdDFFYE84zL[;q /t',/"RpDDI5""Oj2qce!\?$:J$Ki%&W>ʴ])g:9ӳԹլ&Lp]a^>hGGDDDD䒣n5縏-}-LvTOײu 8{$Gq}T\r ܭHbѱ ɄB[;@*[>LFiˬ5hdζplg|s_ڼ6Sd7FZ˙]_b)y۴|*}ٙ܏#I͏OQ%&*o1M??c{t 澄)/iJ Kv<8}csIӀ+W,'iѶ~|ƄUy?=RQO  S<4mKJ{QpDDDDD"Vn5}34~}G/g)-0Kٹ?[As\8lVoZB~dOXUSMLl8qޕaK1zV[O2]|{؝O kC[#Ԛv-wJNؓ>63x{?_O Sױk.L}JF:Fܿ,e7y֚~V#0} ѝOޅOc37y=>~k_'a1_rUEOD.%VeHx#E>(ODj\6{ijڄ/@c/}LW~zh&\IK2<Ȼm? 𳙌pF_agGUkbkҔ1?O}iQLYx~ a=U~acͳ4I{zs%3F-bwbzk7'm5ҺbLřGb^ZGSM+J`h S$mScmTedNmE[Ɏ݌k]dӜs4<I~=iz(‡j LX*S?$O盺k\c 1b˞h"Sk%ũVTXFPE+MU*P/!}YrDDDDD.9K/W8sT-8MK~a:z^}l ?OĿҤjRV ~LHL-~4dƚy㉁δ92<|yhCjgn鿾mO/i郚YC9VBbLφqr bf+>lvuq] +j9V=1Q!>zG;y7ͫ'iW L6Bsjg4Vҥ1?® 3aIY#fṤ.5/+?RR8ufePz\н)stcg*cXt2OakO=c%kN1Z Go Խ~۴b)v]̓2n5""Rn;""RXVF57ȑݬ9-ڄV eY4N }388V+}p߼W77၇"e=K譌ȼnװ~v=_|[yy`3OJS~k 1}q@{Z;3|rϳ]97]_z̕iqfDm;H ߰ p9kݛ$_mF}i" vձrprDDFD)LTD,pd(i@hh-_3-|SndC A[>???y({~9$ =''4 k@[H#gp8| |!x% vv4ߘ+Nfc)x~`Θ,rZw͂q\~vپ=Wi3Now5'nwaՆCxK(@5=C悥 CmOY՚|8+WTn(8|KŠߗg74d q8N͙͠!J7aoӖ`a%siɤAzXT$L nwfl6q,_72qDe )v٨.!""R\*k+0""#"".k@D qGDD'[{k ""Ո bODD.6>(儈HR)8""R" DEDDDDʔՈEO#zj\r\ԡ?#b+:|īE=Fc)w)eċ#F ?^];87X]2y[(>Z-lxQ*9\}iM‹8}o +JΗpryb¯NN[ή(mJY( 87yf-lZ/quO^ۂ^wUxO͋.|q7ue_^qw_I$u=5<n˅tt8HMM!%%dHJL$11A&eN|Xh޲%x ,O1ʖӹQ & LT3_sFlLB2)meqG˷v89.e7?>݃FLL&W.Hf83//K}cRN߇ɋ4Fn~|'MҎ[#_4lW,'iѶ~|ƄUy?=RAGDDR>H0N]7V?y);g7X;#WH}fo־O؍00b䪊ymUn(:4 ʰ=o+D'.=y5w$l#Wrž |ܓO^?҅;_c]( YǗnhEiXkv [ql[툈#""R4ol<٨k4dӸ@c/0g;ԯOcI3m)(\8Yޟ}W aF} u`x0I+ͳfmOrm=s%{^;-ۿѸ~c"{^u;LH*X c43k,bccϛwΝ{Y" H0ζt07'm5ҺLřɵ_m.\꾕H͸~i^L&L>yi[ 1NB_h^|٪6/-JL'JݿFKF`.~ ,ƾ}3$g;Xt2G#"""""E:~k\ə ?C}$\wSŒH:O)ґ/aklG>L次yYbig@, ֣7ˁiӆݺK/ѳW/y9U)%RSLP 8@>M!?юOy XL.NӮs3O.&{}e+i&~XqO dM~֙Ʀ^g) 0w ʺbсʴ~9RNI/W^y%&M+`„w1U/+)""b[:~)nmG׏bއTÌf˲h$mgCFk au\-'8u:S~d>\EXz+c2x5<dV;&{1+'% e=?{{!jW|20ά;i=v̧0rlw|=3WvġXa=*^ G)FD ((""%tlՊvs%ۘp|K7Fv<Ԉ4k!^~At;.۞ N 5y&XTuU9y<GYXw}$,xHba|BW`H٘l!.d%3 m~]|`}|Mlߞ+4xs'ڷQUt,@2p] 2a >+W*7DDJ(EĻ}yyACdޜ 2L%R@ӾCyx0<pyGlDZ|b֮ĉR*baXzUټy6M'eJDFFn{uv܉˕w,ٿ?̓2_g+ʺ?ӾB Raaas%Ξ'''fBBBrUԯ̓2H ؘƨ,TD}c?eHeID GDDJAOd޵FvDBnjrgekKعM %Pc O}8BODrjcƌIDDDk/FT{0e#**p"ic[REϞ=ٽ{7={TD#""@#sD~D@u$V_uoĎTHr͇ ZVCa?;/&nG 2{d;!f _Wc3`Q\ڱOϦop(J1mo獖h33F؜V|-0ϲ>=1s- Pb`$gIJwS`{wsiB+x1V<Ζob>}jokB%k<R [͆ ݻ7cƌ!..1cлwo6lؠn5#t HaOeci2?u3xzd|)8+DuP7_?(?bl_ w&L>'D@ 4G@"ۊκihDлsi߯}n9GNm~zlc͏|OyN-b <|Ul߁y4weMyy&v\緜;w3;䷾'_`Եl߽?0*-L;;Hv:q.}2eNv{ 딑,HP0Fśoc=F xx75j2GUY "O<\wK["RH~N[ruhjڄʈ=}>zzL8z^nOxoAs'r@L4㕯[ts2"0 l{Y1W8Ε+8Q"iU?<}u l@[dz=;<}x<:t =Y *4NwяV=|{q h'sYu,vgJf^ |!̞=СC;"j9""RHOI"IN\mD$?~yIq}=?Ul؄J B+ىI`?\: #Hkՙcٴ nF\swl'n߈aݼ~5r3}%jLUTb<9pq> Q%;0>6-mЊs 6p`{.@xx͹Um* FH~E* DD= twc{˯6Fm_˜a |\N'.W.:4酻W~[yqCCW2L 'v{jZ@c؝n \ToӎnI$_+`hU+nU^իIK`bwv\qdJwz.7\vT<@Ŏ<)KRjæ&BK' =X 9Nk?xޱʍsM~lJŞ. N;vO.Yerm7P$ Y[l,iF.IkYЧبUȥ&)-4~7ϼ% W}'⫍6dz],ٜqt5OѪi &DPu=:Bk/}iobTHmA9)}6HoUiyN{ħ[#Oĝ;}vi;m>0al>oS'~>1/zz|믹[5 (8oy}P^N:,**8y+ y/h$s[ETF/ύ$׹O~PP^(^1rZM? Vn9#{9ls֢E k:Y s K~{/Wb߿sxdM ztsIka3hv}cΙѺqY)tdy-cy#|Ϥ]͸؊/Z50v_^yOf;v~k}aF%|a4KeնphJFDYj7m+zSy#ʶ_~bАa$Ǒȏ?|?P y OFעug Ͽ޹v:w&uwS~A۶mW_|N~Z:q,_72qDe #"yu[PC2ad-KI )%\$ 0={UL_<mZfXVeQDNDDDD. qr,e nv;pğtG=l*B{vѮC'bOK2r$RSoۦ<[mϿKk9Rԭ&'g]LbՈd** rq8oKߗgSˑaCMsYǟy6Q6ILLc[5ia֐'O˾\.f#li@ֲg'd^,o?~xV>9\֏~ÔaŃ 8k e4֞xHl*{Ky%WF!\j!."U8k^d2cǨQ2Dh$E'g9xML-Yv ǎq&M#^Tw_6>ӧ} 2.J\,mu"PffqBReDňylFwoxg߃IbqUhLW?ĩxA5q˴ ϰ/!^fѠQcjr"%d2c)0"eN2aC̻*bs |8O~B>L=8l.Vj\֎zv#`#IЃ.M3ԓɣ)i'fwkԲNxAu#&e;a5-X;IxBntyٌfWCwO٢ "eN2zct/9os@Cg$<`x=ՎM:]tˊWo⮡8MkQ/C1E:`'T/)Н\Y忟r4sXҋErR{寵k8qxV@kbXLppZ ix$LT>ErVlPbƲQ#І6Lf71d싳8 2xghpgFLN`+f .ʭxgs߼9/1Sv/&Qv1pݻ˖ѳwj-ǔNyt:ٷo˖,r`nׯm*[>5(8r J4s^xx&#oL-%]T}Ĉ?)ċ?C R~VF]N'^py+J8jҤI30L^5VpDӻgj. =WDDDDy<N?NZKix<&Ñq:&X[ʧʧ\LTDDDDDJj V4mذVlذ!2ͦ )u)o[BTT}ݛsYvv{ !>щݲaKT+z)R)w s⹑o_СC/3gګn'*j=k׬w]w䆾+iv\jMKT)8ȉ|$GDDDDD )j5bN,#}q8)hHHj|w4VC&bG/3j@"?`Sk'O?aZ3^35yx "q jxMz;%b~{*oR},Zdjї'y:URd$}ڋ<Əl8k0M{>7Oc(ݮ~˖.p)|SŲ`#<1ȟQ)"%EW$҃+Eҡ<7neQG6`3h^\R~N`?)xPBVKj]>[&m:!62vԭFDDrSKTM/>C,5|*?xoëd6pF_K;&;5w]V<%Kywߞ/)HDe $lPr5$Juh֢NDJlj|n}P#.[nPSSSu{9 /bjDkځ q7yo7e>[*"ϑ3ڈ㈎РB~O刈H!e d1ԔBiu#/ x۟yAk`9K*5+aPS7[K4 vqp\j@ [gS@ w$hOub+WMB6{O(8"""""RҒ72eTryb+ >y-W3cu. 5m}ns0׾3og{a_ŠiGbqlxwx|C;2p<ԧ泭!=|;Ͻΰ`x6d|ʅ_i&S|HIS1f)=.S :ۿ5-E{rР߿?wu3k,~zf3)))^rr2K>iܗk&<&3oߎ<ڧ.}FMϨgqoaL?XHHLɱZXӌ|L1SALy"*pAs?Q CL=©'iǣwPpDDDDDbṈkM̩$Pn}\PBy ʗ^|]w2);vq8X,tة\\S}JuN<<Ӿλ2zawз?7_mvWr,1痿nw`[Λ@|O???DDOo݂LJkuvt:%^!""""r0a78z:˗tf䳡%[!-ŀyLc:@ZGɓIۯA|\EU".sOkKʴ|&2oB+vq:::oͽƅ_Ù{_Xme>x?Zb%XlRO__.#N C>fe3zھ6wԵ>.^z'sm6rJFZbql֭mt:8vOJj9"""""创#?+1DTZcSxKhl6SF :H{t) ){CY """"(Go|m)1^Tl\ޱK,f% }MSNv:vBDS$@DDDD3t`G +JmFocxZg)*UB۵4lА$KOͦ$eB)WA]x[A&4xqaŀ%ɄIl^c)x<#)GDDDD0swdnh ;*0tw|;`\f+ר*>&j5 'R Hr~!wx"=a_Pl6cZ-=Z)=YcEf6^?ޖv; ("#-yaѯDb΃7_ɀxwDT6 ˊS X&""""k*]_~1L) yŅ,>ÖƔv*]~tyVC>!3s<6Gs:>M-Պ@@-Z^nޖ$Μ#$&&jſbJԪJhݺxn]GD.$8g x/]|2v=_".EDDD$WN/}˛ek~nNhŽv9r0M=kR*gt:ٿo/+/0 4L;oJ"<@m Zcۉ9um[P9 uHOiJ( IDAT['z?O6`ˌ#ǛhUa1-ڲ?LDDDDf\۽ 7)cl64mdbͪ?];U1 ǎкmkvSOrbX^&`bԼ]fɳ:e'DJYY "x;r2i9)snOEM1GlnŋIJJ}dsp3I4ҙ5PA #bbw885]i֝7A7AƔEiFzrNޜnZW{)exݗ1fd"T4V޻ԯlbxTB3#مƮpglk G.>>6f׮]tڕN*%[6o`g7H-VY$%) "Rr)L~`7ox1 wLDn |-\1ēZFԩSi V᭘`]w- )Y"_s^+FDJ#"""""p9K`$]R™#1qc] gNTÇ ;tаʯa/zzQbӗX G.. ʼn'p\8Nn75k2$;ࡃ\.֭ȑhf35kߟ={vg;NA'yf~۲>?yfu1GDDDDDrDŚtcyq$ܱ7 ?me=NNo攞ĄB#&)) E`` u9Ixx8-Z`-T\sf6mBfMR% 6l@͋|k׹-X Sz2LJzZkWp{BTs1f6BfV3˯%%+)6v;5].@~R%ٻ7ۼaaܒH$z2ܖ7?.zeV UT9c(8"g}p8}>-n7>9'ΜW}^SCӿ``HXZV嘵dÇ%=6u\.0"6Z* 0{i琸8^!k 2Ŝw%W 8=˃qqpP㡪N{GΜa~Ŋ !ƪ!Јsrlǎ5\ަ nljwZ$d^ȥ^$ qښ6/=x7իSzu֬YCbb"_*lp$>>.[P^*u;oY))0UGrglΧ<KAۙ\LÇV-6`Kz5%Y<\{y_WQc蔚Zmz%%Z؛O+2 E;jʄ_'Gвu bNNj{>Knc0虶<>Zbh[ǝu%kE9x 'N񐘘6 && ^g_g@@ qgI02g{+iqg2)1ED0q[w.]lB;aѣ %[!E[GshM繴B|e^0|x#j|y7o +""^ɹ[D$ &3&s=VcNۯd'sرǏǀǁ/1gR`O`p(h Խ$0`MEmQbpac[QzuL&iiFX,aޭ&=ʏ*?YOִ涎QpD.@E$~}6{4S`$`jѭ5\r~? .L4EnjԬJLW|\%`InAtqLgᆪg7j:A:JQ~ 6RDADWQi*44- @lʶM)|8;wΝ;ޢprfo^OBBZUVaPB%rgg$ 4#׮^a.˜u-8bnBB!&1d 1J MJ%Zgd"= ѸY#_yzٙdg`F# :(F55@TeOix>0..%rO܎*ck;sLJ\\5&gp |Sz܋AyJ$`"$90r=`*ժc2Zbz'=&P2'tpՔq-U;ͳ\9r+W( +W.NnWIhD ;<&Ea7nkxm\&u}/GwEaOA"7aswuFܲM)\QbUW1(rFnOO&:z v (+`"!]ɣǂ))}oH?W+m3idx8|3#`H̙h={38st# P?/0(43T Af!GD1e^\>қdyLLYΕRnn9nZTZݽUaͥnq,F9 7Fnfv/eyk֫VXE)O)7U]]IpDFp'({8cW-mdL|do֙l7zc9\~;wB`goWc%rƷY5 ͥE/Gi5F .oIEb$Se9p#nI%c#߂& B$FCZ?$t:UAX,]uDQ4[eӓ))T(uB! ? 9y8)%6G"Fà %J#h>+2.!));x$9^^noVbKz6Khӓ^^XNgy`o]t ݄z ; ,ssc_{Պ;E!~RwؖMy#c!GlQFHmQgrNRX=4l@tjLYpUNaM..lsvFk%vqa-LVPj*22XpWUR4jvtd5<Ϣ'D]sݲf2`eFL&~uKh8׳ɉD `Gj*uM&B}(37ԕBQRHa5sD$U!BQn0B B!B!=M#B!BQXhBYȀ,!? !B!neKahR% U[7H]O4rtf5/QC4 ڴ;OםLђrӳ4 X!Bq y:m>ٿ1,f?W Vl92}m3x%q#Ψl!RJ%CNrQIpDCCsRWB!(y#vUmh}`aśsЍ~LU >ܔUBP'VFc*J!,YDvԜ_?ax4kF,0F24 YX/G![I^ 6ldH:ܑ4/xn3E맾ᴉr )YvO|0%«~B!B9m`sti7Z\ i׆рJy,{i伥xQ?_1Z3gtP65v= ii8֒f5fTL }}AwjǹZ/ }k{bߣr&Q9mXVǫr Q$8"B!CA|F?+_Dh;_'.8X#9}$"l`r Dװ|n;ߠiB!B6k?ù=8NSx2C^_Ǐm71f|8WoLR\o!v/>!G-}g4vXN ^͛ظt,Pʕ-tǺeN Iĩ5`Tf<8>gSmfzD놟SWӤ+8~i=ҰaC6[Ҳ>5k(ЮmFG;#M!BQ'f0>x1W7c4 Cxș=#lXV d>/ }P=`F~S5գ~\Z2jŸ|b{|ΖU㭵ed l3ukaxl IDAT *>N6cxM?-q49 s+#8ׇWtqmWR9d) PߥiB!BRf7~$ժW4(B&s,\;nlyh;3͟.1י/䰹/=߅h W|\ jڍrZEr ^<ѓaͦy_ɂCB,8TQKoV|U536N.❙G-L~ GlN88]&3i ֜Z ~7~SwT]-amʳ~eLXnͨdb ]\+Ugc·_fh|6cώSϼ0ۧ_'J sxiHUc@=zIǿ?l8[3'>8O CZ2h G9wF i *,Sl6mԨQْtT{{T =~1޺KiOưr|o' %3FS{CqhZӄB!B!Bt5>ys8ZP4&v,HPCz{f\Î2"ƨ\#M!B!gXB!w'V#D'jDI%aB!BqOB!B!i2B!PV,|۵<ͣǻшlFUeؒhppttB!Jg==W۰`66\5`KZj*碢ػoW$@R[ߏf͚jJQIpD!BZOPB3;Ŗm֭AAAh42jXVټy3T h4JQNIpD!Bj@vWC{=Z=@YVN?n\x}W`x+ &la|~Oc|\8ߟeͦ'ZQ3}=?K~fӭ[77o.TT ???֮]K:u$8"D9&!B!n0qt"ޘ㼉Z8F}_y7ofh8m^e`@1,ya03冗h9ׯfAC{`;V*e+E\|^;~$\/rΝ;8qx:ԪU-[J%QIpD!Bxt;@1ou2ޡkh/3m[\\ܭ5gΝjZnQ~RB!B\bP\zo*JS1FmtYvaF][.$ZS՝ols֖Zu9΁v*7Pˊ=ko$8B#B!BE?p br-7ճ}yڽr4r MݝJ\ؼzPOo3%|ɜ?ۍhD~zPz7e[C_Sh d\y0+Th;7mé(Ո*l˧gL+9SFnz85) ]W>͛njTTU*b0g^ E!..ή|;oS2%>jUQP7oqv]uťeZwB!Lxyc$9FW.HB?o_N`jȐ7vGzz<c)\ْ2e*`IlE ~Æ…^!&4 8+k#UÇ@Ɓ̜{pr~c&3giyPbֳ;}N_sW&/Mê66Y>?}j3ry+qmF_`6:tc񆟘LF@b1H(qvZ41GB!(5ymE^ys3>:rT vnTb?zscѷo,ǧA:h$,Dk(mIqLӌUpށ!j砬/67 !ņx#LrX!DiWV%4FA/ߌ ޣG;Ӏ^L}Gfl '~1Ccl]۽ĶhXŕ}2~je?R6 :2qDZD:O8cB{a' scsp t 78( Vc21Wө[? 1Gb7QLzgeiiQ#B!r@Gc!G5W^KFЮ/'OQ͕aese2ӆu[|‘_1bbcyawhz-%Ӯ|l5rֆ'v$Ao :? 7Q=I5Q@rwy;T4g( |o*4=t8x;濯?X?}TYsX7zSB#Bq7Jy|,(x_G&58q;p@`5̀S}\j gKոUv݊@qs6N;lډm2#L- 47zvUs &s6_j16lj=:|p¯mi ~9Tq9ҫmZNT v!dWP^zUZ[P^۶[# _H #=ʩ,܄_?fut懃ƒ~gҳwW\xj\NCvq W>ZyZ0 ~ɲ5m>Ɋ(zaJ|{;,V/jc̞{i+tN\G?"h|i7|4=BE~ Rm/2{"?L]iKκu rW ^|5G>MWkaOڜ"j9SkXswp-0{S^|“YgAt=&Ǿ51z~9K;?v+L !9w!>>>j4|}}iڬ9UVEݥtMz5pґ+u㥿93.g=6K&>Om=`s5a@Z|-f l̷x=jZ@DeϡȰ(v'Nab Uc~fx(O W;S4ZjMa!/-zYFBILYFf2sf*dLAԲDhի9@.ص&Q\N1u NP#Y&ơR_SX|'ӿD-DџfxeKcL`HF{ʡ Cڙ7ܹV#-x>Mz90`L%քz<8r8<1H3/W} &a.WsG܆5 ;śTWl^$e|Q]A0|\HW6cC!xI\~}r+1 LXs㨚0~]vl$=ʯq09mN$KVPS8zsqBb~^X{ c%WJXʥ-Vo <&X *X[5~wdv 6jg%@F)-S0a~N9SX^>bŽn7捣(mWvޏˋp]5jMu%%'Sn}^a…8AXs`yX w'b!P_%*W \!(}ׯ-UVłͦb4oOT3!Nh.X1\N \FRk2@FBP86yWOK .hPċW1_/W+5'%4| Sl S\6J!Ѡa#tz=ZvQDU6,/WEwMKM\T{#>HJFߏf͚jJQjLljISK܃hNgsN1ؗby?`CfWl*T{$B!  5LF#Ee6uFPP,[V+l޼ʪABc-8bI"V:8x}X\SP#PACƣ2U\ҹYO7'7Ej~|c C0K!QIљGt>wP0ؑ51DQK(3r.BQ>27F@ؔAS~`Z`2βrX>q3#2}[5Yk DMgHqm}ϴGDk>jޡޯX=q9fӭ[77o.TT ???֮]K:u$8"q A<xh-Gѕ''nDeWH>al"O^] 1&J&sbO =0:}cU5w᩾ZEkk_Ϋ[Ӄe[V+ЪWsZ<&.z@_`_jNN/C:z,ʣ 3)_-8}" OvO``\R˗@•ҽU;wpbuU6-ZKn hpD QYc z-Saqz/x|WFQS8zsqBb~^X3`QSQ*g`OMo`[:Veats21Gv$.Yw{s&~潳/f _sPS# 6d=tfɪyz?d7wK!B]fXcs:,ڇ0#[Z 0 z ? Υp/O!${iӦ Æ #66/R+ɓ'xgpwwV]ޣaa=8rQp iBk,S*zwZ%!Bq36m3fGa``.CL2aj9#=y*huB-* ʞ:3{lzt܅ &_!6).Szz:nnث!%lbbF8{5A4ۋ[y.Ɋ3B!J-aD>榴P~cſ OgVРՀͦ,LIl_q|#ץjQ=3Q$lFt0 :?^I/1vvƦN7͈Yubpl&|VC;H˳N\PnT.HܺM? (tžzMhpW'D7 Lʁ3q?:%4iQo5_?~6 ̦Bn,(X,i>Nբu&B!DzR/ 7HI`g: ,ũ:MZcrIW vn{yMO]d+dfÜnDu9+b>ǂfR~-;pE-R<^!ҭ)gZbc%=-i|:}*;0dT^T3'-1˧9l~ҽa_;#bAUUn_$8"}pDE_ա|J} ?A؎OjG"2Ej sq0.ҳe+k$FtuGc>Srxo }雚J{ xZj&n  `"WLCe+Dn&N/qLonKO0C6`i`ș$ ?dTNc D _غﰢ`5&s50zd(D#/o9(Xsmy=տ.gě6/پϘj!$ AMpgTBsYD4seܲ49W N-ďǍw߽U@JhP_{YO&z {pT臫2k? ո'|`Luu40^lZIz†ŀ*aI?fw Fm|g t+4}a]X dV]{-eiț| Oè/ۓTH8/`;w<{][Lamx"iWN~LϠ-s.6 4| zeUUŜF#d1}||NJuӦb͚sĚ7ȸoܼؖ8|$)ZZmR:ַѿYy-x;a7+, vGRDX3ɭ~?lľ\٩x5ȓػ+\vyi3 Sa_H:'ӣWiF}psCrkf癗%uՄ3MPh欼 ذWŬs'C̊yo|xῗ} /4`|F`$<32^`ѯ/R%3vb=@۪Ly#Lp?<׿vt[Ej׭Ѹ=ǜmџ'R2wq@`5Pn#TBL2i)="Y-bLrR"...Gj ))xwipDK~_u~0Wb[T3ItY)N0vfX3#p!p2.3=~Yk0C*F|l_&_}J3p S霺7M|@aKbkHl0UuvϞ-3fՆMKM:Ѱl+)7|РwrjJ#X#(P;ZjmVZhk1ǩڵ5j!5 (xx(}+Ws6ف&=yGq{k'6(8UiNM,KΥc+`}-px<&7d/MdLl߉?يT|b`HK:oݘ z ~,h[KK`sP z=9l4~ctWGcFv=eY|Ӌ'z٪FH26xd[Um>(cя˾DCMG+0qr'1EO9?mDtA4'~;]GWN{*6L.b35;88Z/n}qAgtU,&G^s‰U󿗏ѯwm-KN]GG2+,;0z+NAT%)9Q5/n/ǫNv$PߕLxVQ!gãI*MHE^ułs]ŵu]ݵZWAi" *BBBz2}c$3$p~3sv{ιd||/"k4~S]8]T7Lwn4\u#>5uҲT# F+Ѽ-hv0k@05V82Ʇ<O4lfRڵ%!i_~]4ZFvv3\o_OՂRӂjOs|y}gN|Ktxo4я\ɫzS"y3{>ŧ9yPKlr=S1;ڵkXpVfڵkO.]0rcrDёݜhx^KҮrqjdcHtKdQn..M-{BASmT;Vo%V۝1dRBQIa℠X饞[X:bmNIe3sW 6g*+-xťt݊(!*Nr,%pk:o8H⿏:X|8bmI*ذ6:/lαWيt%WaKYKh Qę4ҟ_f\If섻P{` >6<\Fv 7uیE=:~M2;sy=Pw!eSX@Y9%GrHч9d?-mO=&5!QbRR+Dсr~lڨd")#?45^QN/;}(s06m,GknjDUTܪ(UPӍ*zF+| Ky嶥rZl-ܔmWsv,S/aޣqLX*4d4^~'^ˊ!_yhq yjׯ?;w9u0S8#Vh XcBѺkcW\zr9lhI6oZ&6 ʣn*N,;N=7yp}Ȋ9%`W()k. 1cg \=BɡAU[9Vw)GU/*20jEKxAՏ)7 t$WM N8 Q([S\zĂۑw:eQmV۪Ӳs\~XE3IN{^=X:/n<'̨Ĩs_4)eYi6:eW&=ۻ-2(s fHWXJ6\B^?\ {@žjO.YI;CLPǴzJ~ ;Uv3>tp4cj69Bgg؄6^tr8X#@fvfԫ~17.r0N'AU)ja42lfVh(NMü/nn'&RQ(jXfsLpbaF>kdPvq=9WnsVTEWp(Ozl7ra13BNrj>UHiojH{;p{?rwtN£D?"""dU,9Q1x E(Mk5N|aΣ)U%;w WQ) yV?S4awV}û_zo'>j+ I^u, G9s[ bC6_9N'{VPcɧMG:kGaw1|@75Eڔ_\ IU[)DV;c5f`+Xs'iv(ͣ4 AW鷌NUL[3z* 2V+c,.-@IBP˹?66:v+)W۝(( =Ntʣee_^ ^Qw8ף0 Pj]J8J2]ZֺqaphEޭQדe |yb['s<.fa)\J4 ?ۚ鉩jA>)t:B0סpRIm‰ CB>*,0[g#ʨ96KYZߛkT[|xb~QW@zJhb4$%*,A ِs*<]C&I'DقV t7p[OȒyidwWzdj̴ۙ5l)}}mϟ>m<h>cG"Z.AvfH4T]MZR"A7 [V+-ᴉPWAFf#GgӘw6m U^  z[}HOdEE~#޴vQP@38+*QPW1PoZ#u]~PANrD)lw+û6'>:3J cg}.=bT[ ?Ђ*\٧%q x-RX.{wbeFI&D'wbս9(y tj Ƅ`1MwݚDҕW$X%ϴܷ;IF cwiBzcd$$cؑ4-]ϊ,;'eѺ`)&MHI G1ؔ&M6iwO<X9N}C-i܄{2I̶^Eaz^[rGiʑ>ZUoa!)._A}^VgFb0k\lkPN;hպ'WTJI vHSuNo-EQr(Q^PA٬ZI1S˯b51(pEǟq ȹZZ6zȠ\!sdJ:@[.Uݥl~ 1׏~"2> fJ6fКygڰgvNZ U3sݵ\@t\6W`'鬸z&={9Ѿ`|ʕ^\WY~8n[ ,X>WÛiaa\e1wtiKhv;/v'VT0$<]RS jq"BՊ ';%"<VKߔjz'+%&GDq!Ls:y`qq~뙑O_VNXJ8ESNxa] \;f$eg:Rd IDAT^ҷLPYQ9?ЧO/޽{?>C /; 3`jړ^S 'I_7*p.K2ea.?oc,11l1j4 ;*|kS5JN[Be0nOH/-0FL?WT`ZlXmCU~uBw zQ,/FE1>!e!!شZZ-L&c9]lUl63$)"#b4Rh)4XQ? zɒ%KسgFw.rسgfbȐ8 mZS2]͸=`prA<-@')DZ>lfN-Fν^v;7-aa\bsx i<5ZUϫF?չbjRYI:Imix8kqo܏"lCNBp0H.]dvBZ- =SYk 9Qf[;ݶc?^UsN~}DfX̄dǟi0h9sOE ǭS9tr:phD`HpFǷ,ÈR뱱FAqiچ$Y@Q(F !W Y_@AwQ,݌Zp&y-oXxhj~Λg!gq=)~ʏ[ιx=os8|.yMv;vĥA8D, ԋ? ~[cVgf߹2ka`hvz-Z,U;h,lꮇG>z |koccĕ2l8q y(}*ZD͑tIhwWANERD~ (?EE'?.N'ϗ%R|"NQx~7~2)arL\2 …q,>yYԛy.-7.+DD'S5O݋+#CA 5s&*-fN|Zb)`n@FޖWf@DEi-wF&%8)yXmC5ڿCOgB_Fr0j0%`UC*J2W1_9&{E={C8Іf8FMy-U'P](`` ATrdjr4&^z# iK%f9SIC؅|8{cJfhe.źTN GZZyķs:YE߂H=CZU PU8w3 }ZX_׋;|usfj_QORS_JZBnBB΋| ѭFA8ʑ *hKhYn@O\h*Doyy!*`Lc20}2K,uaiBIO಺=od'sЇ~ 48 5g'ߒ匡ˈv;}7l6-\ϼJST+5 nh)ѽ;^d/fv}Rmlo*f'#Usֳ]m˂*blp1vEZ/*66ql_F-~ƿךLh 'U>ciIx8ϗY^:ӹoVy@ﮨ8ișϷ9QÅ5\5h?ܽi~rNe]q:SY@բ70ļ[ryt/}h,%娺Z6| :l~;PCoeg@gt|Esf6r8baLײ0,hr gndϱn7.4m#zWEW ?olc?0*+5De۰0-+3pd5&f[I GE52L\26J2dƍV$$ӫW/trFǮ#ꐄqS9Sbٱ{)}]*a$čb,mi²2(}0&bK%UVZb/|#>V0ZBC]CYdĬTߖ6*s~$BWM%X89zȶv픋\N5sf&P}e-(ࣈ~ `C;+++.Dy?ZVMaVh(%Z-)n7WX|8ɲvs!.]Jdd$mȮA(#E/nGaG:`ϡ|\"a'M;=vz"XIAA23veVP+{VٗN,nw[NX]R}9맯3 (6clj?'괦3y{k7t$CRVwc Cqf-MY|:AR;.2ֆtK@r v8JZ)JBCU2lDkJMmZpĿ2Bv2펖"J+Mf~6Qq M$RrDN9:_s6fE7_S>yHG/{i)` z=ݼOT>.*jP}cVXgUx8~=XzL\g`>ƣw+ӱ;&iЫg˖֝t^NFQn UӟۭmwXt$SXԝS n daVչe'o4]}\4~ mėa#)osUfǼz : HA8-P w[-?n"ǘm fdQQا]X h- '19:>7v*[zG'8;:6Eca'=[ع`?}H7تveBu]U[t~ML6w[dzE ^'"vΟfW^x(BAAIII`:iӆv=yG jEa͚ٽ:f;Чo_\ruC8"(X hTNːae؋]L,c5#yC[b^uO@q$/;y}kce#_m.{ kHBJvTo* *['J\sCgk׬?M `O?v/'pRIh?|-M.J2sp9ږtځ(uSP  &@lwV~^>`//MDZ_ZؖQrEG՘iٷ3kRg|OhHW Mx]$)PYdA 3ruy\^_1nrRNic&8E]\݀ƘD[admM1S+U4Z 걗2TR9!}Y6%.tsURBCR|%*1<}} vPo\e||<zWF[\P:c84xwaHuQRf3ӹibĕ, rg x k 4Նc]3$NESk.ibׂݔeyEZ,d[i1~"qpAU-D)D#5FODJKg{/gĉ :3y֟{0rDDD*Jf3#F$=}/A ¹HͧRA־̃Ҷb=cOa ǾGqo"i0)d=7בj#szJǀ櫘$ܻ,"XGLt&EX JX_C.oGŁ;хvH*qzBJ~I?HzRʘmLw);ogmcs?2$]| XN]wky;K%NNn r_qU6-?19tb$MKcEus˽nvbII TNW2PϷ8ƑI4JK#` E16K>%` VvDZ,IuVղ_gĬ02j#>˭VXpWUHczf3_g002)k++e$ZQVXސU ;$D( Z-Z-یFVLd6SieZXwUs(""rEDԈ1< l tmnM౨Ym2mXkxa͡N[TTT #;`ym1[o%8.jٝ!o`&CDjUOFhWOP|geCy9r$هl0&OL\|B]l9*XV+a(w9 bPQ^~ktl,n|ζr7b1w/IJ"hOn-N\<.65 +ƭ7֙kZ\AXtp'Z4Rc G` a_T@q`oc(_ la' rlZDOf?gmRWS|sZ49?ŏc{D/E,:UV{"} J_=Rۊ?%u87C"s|MX.jgRqG*#~? <Ԅ2|x$X˲'u;TTSs7U %ɲlfQ͛5w6o&K@ VLEp>0&Sէߛ&8o[h~93ujC^$܂A=Uk<.dŻ8`ѓVs\ڟEܟ_aǿnsEB7-O߮iM&psEQPk5ɼ<\>_{R}qryWc'S T ^[pn(h8u#z(GQ  p6qXmt|]M$S9`ʃ̺ [fsVQb۟7Z({yo͢~n܇ho`Kk;UqϔﹹP?wJ඗[dc.8Unݲ9zZm{O?y(GAAAsߧP5j!w6kӞ-HXD4蚥2 =]W4D%fN}Os lw%(O__Oqk>jΔ7'10ʶY \725`sܝX`g*fG}Yv .j6Lvܥ &QnJ(GAAl( V( `5|WWUKBx' |o[9Hq5|vU|F$X;N=-q`qY1_h{# yɷD.^:p_PK|PS\Ʒ_88?7)hZO]NA]:L&T#rDAAs]<+V_f(IN+gdC:3 |7ϔ-:44__eQ\h9яfЊAAAA  (8s|Ǐc8NpA:  (?š+q9=-N'[7oRih2AZ#  BE=ضe+/%!)#LnQZR(Ǭjq2g˅V+ߜἿAAƀFs׋KH$4E=(++m/Z- dggE222HLLvBƍX餏v;}`AB|/hԹ+ 4i֜F Փ%KKjjlzq\߿ٳg3z(x7 gTA5a*OqCe%x32F#9ٖK AA< Ĥ$*+8F#]t!"" 擟_ gVKbbGCTV!A8O"**r(9(FADX,Lrh,4 M6t&q/t8D1"QT'JQ).cVUV2"9Y" )`0fJ ,2۷o`04*9vv '(G-Xp NI  .v9+/#ISZj EQ8r r PQTcFh(|&i,)! pZiժ+W,ǹsꌷjҁiٲOAqȖ͛p8 3Ao>{^U?U&'i%[  5Z-zx2bc>|D BujXX*+=AjIHW^t]6&&Ν>-  58qdfdي >dx-4W_Iz衇AA8+n:ҥK$M_*t:9p`?HZ4o![ 5WhlشÇӻw K !Ck*zk3n)Sয়`F8zHH=`x0'Ζ-P\ p5Э[hK`!&MO'A>~vJ_?>Ǝ <_ïŽUs0hr tZw=|>u*z2SzuM"w3AӼys?>iiiU#z=uUêUIMmf EQ((( ))Íi੧AÇ=y`t޽~mt5JK=LςQM w>ڴovysxyӟr/o Xd:x}2|+Wz:<^ -ZL?x|зVZUUQX\.z}Zh?u C'(t:JCPfoa`ض~mx+Fj_woXr% kСCppu_^4?<=z<[i?_œVZZXcM)ן pOĨGARqF:wƍ} ~٢q{Yb.=7'30y7}Rx5XɓKdA EUk6lF~5 7# d6;颰yD }oxܕ䓵?,sa_qKꛞ|݁,Ə;M_J{.|@כ_~1nvL%{ĭzIAAt3 ?D9r&7j=m~o"{LT6oͿ^oڎ}!lY{l+ 5Pݭ&OA!ʑ3I\o[7ߴvKй"ߴN|ӎ \.*U_}9FAbrDA8"3)3 ߴ2?f4?nO+VԞr% (& U~ZǏF ."hdS[ l?ى[11u/?E7^{°aݳAtq 7}f ~ƦMu/>};LY׮Mk));w_uUl{޷RsAAc9bZ[ Pil|oZ~f:T{YY'7gMt?}zz7_]yaHO\޽cAAsDQ1FAiL.Lw;loSnȋq_W߼+8'GmL|cL_~~m {9A l۲ù9lߺF#AND9r>qMop0\۷àA#ef-|^|z˳c{,Oԅ=3fxvq={:k`rO o^j;$1Gs[߆ !!~l>ͽm# (Bj۳#yq9dg}ۣ:NA!Y'Oέ:<ɾ֭ N=  `; ^}fZ|GLZ=_  t+c=S5c”x)AA8f9B=زi#w`42a(n7κbz b9Ҹ^zބ c/Y= ЩSS?^y-MY0&O=nRO pV9*&Sݺ$<< rp8$ Q4VXNxT_p_kkh4#mAjjn~BC}Voyr%! c.AAQQQԚ?D>}q\v|AAG V}sN/KK!)c?FN0qb{gV<` ~٣`hj?eKXRq'.$.O[媙q|t@.'pkY B{̥4t8p>nDYAAzNKBB4o\$s.x'Ȋ%DB‰`7??""<ʁ5kzQUU}G_bF˗`ܸqKֳ73~b * b̞=ѣGڦ 6֓RTTڵwTT6X@*VlP쉨hwc%DcIQcb11Mc}!b%D%V+ HgJ9gq{3w9γ3s_zg,$pϖfxsYҿ1#?bb`DigXJ‚:u`kk{UZf>!XR*-[N^Fy>m^z*F !F#\._GKL (%9P(0 TuBZ5e>Ӗٳ$.B!(}#I<% |B>e ty<u4o&!! SŶH B!D()4PdU((JT?''Zuyj_݋,*"B!#III ٳDDD|J;;;jZ FC$ТX|!A I!t`^ԅtB< !!;vySrT*UΙĵWؿw&Uܤ(}˖7Gu$QDD#ƍ0V Eǎs LJSC)/I`/+L9/YILR/Oz5T߼M}0VVk4mj~dZY!㢮ɟss3?ullOlʖ5rZH6) ={J9ƒB!DN^% !OFsx7UV+sj4UBȡ8::aI^̈́éӧDz:/FuTƣzWзn"g}ۨ_#[LU^ ?!!>Dw{c[FY{udO^׹s0jT^!66H+ jԀ7 •q*0RĘ{"x{C?7Oٳе+ԭ[kDE5KZqq9ǸUWBN)Bd"\*Ud2ŵ֭t\̂E }z*Od޿?Sb$]/(ՙ3#[/sb$#޽N(zYڕ)1{׮?gNdt"+v v킛7 wc֭#c ?3'Frq1##GQI'jxFju-ƚL`4,V(.L&>7[R m[mѶu&[[}}1YYa};KWL⫯Bv5e9 řG/5jԲ%&{{>zɓ=U["t:tP6;c4`yI4&&¦M %OT J ?0OrΜ ^ҥsgprؼ>L?*:e֬_s9b.CN8u'ٕ+wlhSKrD!y%jx1%HWҽ_g{}6wl'6>1&uR PMTh3$G_m۠>59#ԩt#F$zwޞ!>U``J']}$6[ 5ZA+' :͏E2gg:u۩SKg^IX.upp+޿yGG!5^- CTb\ ɴ!dZuYnc͚ӰYl߿ tJexY0F`V J;Ӱ,IL|?1͜hFnS2Th6_@ nYRPK?#o3*Wba0?k8mþ,Y5?i:&;xR(G2$UMdH^uz֧Rt-6oF<#+.jyEW")HGRERP#ʘiMnҿ_nݒ?B! =t6-xe\3`_?S[[YbmedW﷨L 7gz~+uG^pf7Cy;㠪FF 2M>&n;ı> 8s҅\zilS~ޙ/ go_"F|~4jԨ#M6(=e_xE)_wkBx;3W 7ibN#Ҝg?qϦTP2U1n 3݉KC5}$z|waנ0VuLE<(*m[N-͛h@bݽ[z?M9IRPi\ 6վ=XƘ`X¼HkV1B!JQ\-+W|dI{JL}eƑ%/fAVEBZFM͏`rC|KC/ѯY5*ĔSq{VEdv>opkjF}vr]j6yG"!Bs^~o_8Q1 $$͞$$szV1Fg>Prt c[jH9Ў3<[ߛ蕤Ĝ;2>%[doOB1/nCTy1Ҵ \)pXɒ0pyN/˵c\ ɚ#B!DF#Sjx: oW%}&yTIq`zx9}sT-z`EUFֶMYCSޓ#9I974PQVU‘n6Qc[El819NOxH.j'%eu$]~ jW+e.cb0h,x+/x U]ru?dRk`2M Kv^ױɵHϠPfL0a2,'2X9թSYvGo ZOڵL@1B!BV#ċGTJU5 (2I+a嫗QUG`2Iz􄓒%~v,h™NL*Msbԩ*m,~f'/CnUP<5)J:`\} oB}KPDERFg ]2'I"Xhy`k CVI//pwG0OQʼpkŊ/nbO<6?&,?^ɏGpgZ(Sj>ňd2ƌ_Q!"dZ/DO4lD ܷoSl %$؏ٍFɜ!!11kׯ2o̞9jժK5sl/^,OB! HbQ*rw#l֌eˢPl2{.GꡱHWZOcLPX[[kn+S)Q$H($9"BLŢRqqhԉDEEzqUR=uգ\XYYKW\\\HF}vTJ%SNN$BcB!FCe8:UDOT *J4I<ߏVVV JI̜5[!B!x%/ZJۇ/XXXSlTL;&B!ؐFӴmۖɓ'3rHlmm%A"D1#jB!Œ`@VS~}oNdРAHDbD#B!BbIףRh4xzzOΝwAIDbB#B!Bb`0Q(lْ7obii/֒ 5GB!J#VZ?z`Ԩ*xyEUJDB!BK!ejJJI3t`{ai)OE&B!BKj_ix׼{$dн/.V#B!(VܸqV򲰰~\r0J(Y҆ >q* / V#B!(Gܺuү_?̊+xe# tFTjb0%9" JF!B!#AAADDDo˗ٙ>}1zX[kQ(h4*Z JL ċHB!Bb͛tꫯ`̘1++m'FCxfKj.˽pM Fg :WS8<ʷٴq߃=.!B!DԳgO3f SN嫯"**crr4'OGb⣮!wT<,P'6_{v[y*-%Զ~q;nl]ilCU.=귁_y|ZU(B!(n ۷wߥA4lؐ%K`kkG} ..)vLh;},:E]$_,:eӂ&J6 _ fbpTU, !B!R̙3;v,קdɒX[[0|^yΞ=cz)1g݆hFCbDzw8?u0:tr0ּĒ>)A \%mN烮DOFPB?PL&okNCkfL9y%FlN׍]V-8u1~o{^w׍ eӔS&sC YQu=\ԊVyke|t|SFIcH\ǼOgכ9C҉.m!<ދyKy.xL nbl8{)lG1B!B|`ܸqcooRDTҼys~j׮Mδk23 fs=b 'bz7cښ39xOLxZXGN5ʎFfu_G2Ï3A?rLT E X F~ /2lz ܹkggA8&ve9:7Ѿ?[98 M~cD+tw@5j $8yY%u=V6/P=_/vggt3;Ϙd=鹲x$rs[)MB!B+* -jfƌjUʕˣ<٣@ƶGjiϋ*]a,ِ5uJ?ګ>xɻ:n>MqhukwTvF2ۍZM2e+a{r3 !rKG0EEy1mUjғCx~ WTh'_LGH F-WθVϤQLt `dJ$FjThʘRﮃ]RNFX|].eѲs\6ڱa7l%gdy[١BME>LoW%hi KG7y:cW?j(B!(n E۴Z-Z[[ \SjBGUWc&蒋&kYò73} x{f܍N~gW ;4f%*PFkK\W815)ũWhN\!tJg&ֶJVCji-KiҕJv!I8 '&,,~>||,D,oM R"dsk(5h %E-׺{,@TH)*[jַ%T(F3c ^ 2rD!B! dԣ2arJUNEv簮̤]?qltŮQ0 @@L [ PH[gM{+.NLיi#*KF$dZ$PSk>Xfxutzo&*ڟ;{Jrl]cC4kyrݓ{I3e2aH2k~_<B!BǟFA1QP˻dZϚERBs \M! HOt;i qn m Lrh؎z~#|:GubDK3u$+b S\fGǫ[0#?cƆ ݸCh9+.$eqEkVS\/2MTRm_Is#cű1}uèʑ}(37+yP&oeo I!B!ij0bS,X5yoc]7wnfX[1o̫}*2N'`:.Ş~516Fsrq `gtؕۗs$Gokk9{Uv0hQLЏ?!:BK=ofqs\ȱl~3;[Zšb4Y2/u.?zN-Q_ seHt7`lZMF¶ZࠪH&vr!oeW I!B!ijpm2zik*LDV~@a8E=^S_4njږ)] {I9ė\:-*VϋiP;=9 ]7G\FZVX8U]\h?q,d+Ekdl+{4 v{v (tt3vzjXZZQp;i0r-?m, OB!B"-KiҕxHBu;bήviT *JTС" !pbLGAS2ќ#Yf`F{O;xVwlyLgTQu%W;ӎ3D$ֹ9jJ-ҊVI\1JO`wcz+3#*brv)oeO$GB!Yc2bR`ť.Ȫ^+UiΩ 0Ȱ%K `L>ܺ2vDq?>Ƨs^#hk=)dQdKaD/fgOl_ܜ\;忍ES!B!(ZT*%ëu)] $:{6ԩCA1 )eՇ$8&M6D):2t|ik2GM$ʐy_c\2T갆akF^bɀ8uvl ~4%"tEg~(L6U^CAW' {m#(gB4CA8C4?']coCbe "FOq˱Ώxm>ئECʭLB!B<~z.| ycФn,{jw56;G9l(;/F~5[Zqr>gb O ]X F~ /2lz ܹkggA8&ve9'sxɻ:n>Mq#|QCx33iX٥Gph~X׹WIHce|2=UN;ur[(E< IDATtt3vi*25GB!W2 APVdJ5m6+԰ܙM%gU48$q-Ɣr87v:]),JӨգdt(b5@B%+S:%WhN\,kx3?#'xn6 p)6#M27qn7LgTQu%W;ӎ3Drscs*Z>c8vEJK$GB!(Ӎ)*(0aTs(2&L&2lɒBa~cc֕'=4> E3+.-wyE[Y{\(2͵_[rUbHe*?2F!B!mj8B؟R)]9^`2moW\WSRIulS]RibRvofRچZ7]G&~֜՝\cߑNxrC=GlԹ%eޖkQX硝D!B!㧮،w[ǰrwl<}g{;1) t:sEġ/r9y1_F.7zjeiRǹc9c29V-ǁwu+&0T-[ǎ1cn!QV}-So*Z:2`Ps)K1b9WFB7.]8W4GAc"I!B!ώ1_6HW;ѩѪҁzZ/_\W޸]?1E+w ӼR<[uf^ԳkDFYounT?M󲍹JK5@Vϼ0^_615Ԡ{|֍?vW|>e\K,&׳ȵ,Y(m9H|eLzUZFDa*1YB!B۹-Zد M1䗼[Y%)YB!0u|[R=Dz1` *JbDI#B!Boy;jn]*5!&I!B!P^*# !B!XB!B!5I!B!4[z}VwYՕ oh1,;ҟ;112@e-DB!BG}m}|(46o̾0Szf]j[?v 4gCZn^y6ڳ+MzF:O,bSutoAdB!BŠʜ>flWE Ǿ׹k\WvXڦI< zjC*ahE z7X [ETFDc 8HI!B! Iz?l]8SVeҞ J1*%}SNi !Ow0=dSn]NTPl$O]Ņɭm$.&)B4C5qj2/>Pe4?']coz؋ҕNi>Ao3P83]>K,0gtnm284?fti$/GRwOc؝b)~icbud!y*).MSS%1fKz \:M6婹3ߛ^Sr'y=·fh4'_cs+uX0$GB!y*QhNL>u9l(;/F~5[f*lysf .eۏOnXμA?1!i{2>d)Ĕ-8+VtdX+db-}&r,p)k 喖ckLc׵ gtؕۗs$Gokk9Zov9#prn)6Jn=WDWn{3ƵKjϯl"vv1 wӘr F|BXsz3+ٻ3mL0t9ޱtH^i5a[ BXFk"ء2OCxڍbQ?^dzHs98_]ςB!B<_g^=wZ8Z >F1)Pph~X׹WS9ė\:-*VϋiP;Ly߁meFaAnN&J,h錝*5.Φ_0EsS^z<Ϯ xFTөQ.$X5)]H}v j_ ZwUFkL̟s1./5ZK ,--PbcϝδVrg^mq{P׽6}Ja7i$ݨմ-SF,71B!BM[w84G9ε_ϟsGtɽ_-N6I\1a9߿/nHb:3AθP4 n<$ [QQu%W;ӎ3D$ !pbL딄;^e9q)CcsU mJrVI\1JO`wze[Gnԏ;w{[S 5~*@MGr6Y$R۷&ө4]0=Vrg2GUD 8Sؑ0jRYQ5GǨ(QA"6|W#B!B QٔOt`|d,_9*ުY S!% gzYc3ꭜB_Wգ2|^z&#&U V\Z@YgHxe~j3;%ϢQ:Z$3:^RZOy l _ӕ틛S^xtPVfĿ2F!B!Kq$I_OJ ; l\*Ѡ* TA}GJh,qf~ߠ*a⻺Skl;2ShRF_A7 zب-qALxBu7 1p۴5p5+ u>IҭgC" <_/ͿcwgPH7~pS":S#1>D u.T:ޒB!Bލ[+GҸ9~Ư :ZOEK'qVEY7R x+_}W{e!˨p25z}7,+fMdVZF9Ф;/(rF54i6VY#9o0Q:taL(mпu/6stXwoYo uk楡s&Vڱ5KATpM~'h0971.u@ʕFG+WOUat)L0G!B!a;wvE$B2rD!B!Ś$GB!BQIrD!B!Ś$GB!BQIrD!B!Ś$GB!qK u->,JÅ7Izq_택]OʝE U'u͟D{<3D#B!BQnaFTA ڼ3LyYRKtmf,Ҝ ky}XkϮ4Y|u<3'P {i3D-„B!2絏YyUQou6NmmJv~} VoD6C#8!B!($}iw`NZiJ{&/*sƨ N9:1ZDH?MvE8{gSACw8?u0:tr0&|Mi1c9_e&aϺ {ZOr=t .zƲ=u0?']coz؋ҕNi>Ao3Px|1Kf[>]<3 ۴mGٶ9y~No^Sy ^*yZvi9؟Ѧ<ŢPc}5G<\%9"B!EMU4ќulGx X# eEO#f K-o̞%lb [ ˙W[U<'&d<-tE7Ѿ?[98 Mb^'wl\tiE`aWfn_ΙÓL\j9مv\ɹ<*\Y<]9.@vænm!,l aa obPeV&_4Ӂq~;˒8*oxڍbQ?^dzHs98_]ςB!B-E)Oޒq)ݛF?a;f"ivhdC׬F)h ϋT]bwiJ:Eڮ~a1d|=Z%-@E'xVX8U]\h?q,d+:Njz.qŴU}KO@ƶGjiNKG7y:c!"ϩ=PZZ`ii"xG}t5Pe*K_Tu)Kט?b\^9^hukwTvF2ۍZM2e+a{r3I#B!BQ,>h*毟ѷ W~EGdԁ&{[l1a97uBl Sy΍lGؠޝeU7D`,2h$Y-ܗThBMˍ,ԮQ˟5niVM(0 f+}rN9~އu}|ιnRrǝhQ6v3pLU2cxӸ'iqKRR9fm= !?ξ l[LJur89Mk]-qq1]p b TW;}/^hB6*w3rx틓o lǕ{RGj_>2/iJH0ш<і8we'&Lfsčb[T^Y33*BD3|9NJTLtb4 fe߂002RX>~9q1 ؆8Q,q#{w2lϠ07a'u; {Q7HD 4!;;QP3o5:%4r18WF%˷*doLDDDDDdiE0Xv#6OOLlJ8SJ!1h\kb5wA>D%8gW0/ b*1XWJ؈3|jo^ _>a4CzLEOpJ!ƈF~8߆GLŅOtI7Bݡ뵓z?pVZK?mnmIݛ"- ޟG}<ĊwPnɎ*a^wf2 _$"""""RlЖ͇I'÷\ͬ$\q#Nd7cM5F#""""""0{hۉ?E5gFw9"""""""2DRFDDDDDDD45GDDDDDDDLSsDDDDDD^yi8}Wշ+}5~e#""""""1.i鲇F=QtqL~av4uR͔RɓchJ1/J """""RD9)6xFN󊠼0,?EN0m\3VkVxZ~N7JɔvKky9(?Nն%~0D5rXak?냏5kp.;IqR45UjvMG3y3c|+ !cCcnEwS5bOjӋ@g6wN5d]We0m5]F\Gűi _ jx8Ҍ)=_HD$^q6%AFNKTLGrNN"v}ΘAnq;,%.+>315_Ć+E6fWe<ӞƲv򎮧O.%.cxq190r+rQb]txS73/N쾜"ăv+13!Sr.c-)#inX}%]w#"""""":&q/M.,,I|u0tٺ5Tcmۈr:l7P?.=_}j mLG[=4-{9 y)ۙB9~sdkz[ˠ,hB5 _:RXnFEwsqQ1rj\jN˓TEI#~rDDDDDDL̨ nO``e>BZNIt5LɄMG}dNf\+ ;6}AFQ1?a>߈!l:MqũOqQr2گۛ$5ҡ戈]95r#jUplqzQ~\kd13"'rԫe-&/JŰN$r8+*B ryn;N붌fWh۷|svss\#G9̹+M/G9Ą V ˜}Q)5ߤAM:8Q,q#{w2lϠ07,TbŻJ(}G7cfo"?o#uBP˧Y>tY4}g"C\}ysز*x6|2>j>nX/'.X8#;}n j[<~/FMJH;1?52+UWO%ll>x@^Q1h\kbaTN=r`}W&CkpDDDDDDnaC[7BL6uEh~^e9)6yg _Tzݕ} ~l}O܂ A[jm.jƨ%}[ijH戈Ƚ+;p ro3{ە>eߑY9u˷F{2sv'PCA/nґƳN^k.MBV{ɓchJQ%)ˏt4}`:3}W:ujjۏؒf?`g}F` e'ɾ.LaoʧѯQbVkJk |"J`N5ɗl<Ȉi6Z=t<gMG3y3XXJnkHT/7;5UG1Su+/^o2.mٖQȘ/ױф3S?"(?!/Qok<.t8[Q#""""""Q>>ٿ5bWTCٝ0:VcZ]gB,\Z2Rbm#iȘH`##U4ՇφfYNaK{|V/n96=1VocTv1Cէvxy%CH۲"/e;6}ְU<3/Co+]ݛT:c0?a/1lg: ] wCÉY؃I_2›#NqR'["ϛ&f{kEZ>fe߂002RX>~9qF?+n51ӿ8y2 !כJw2ja< G>($,V$o#!ig+`PvRWC疗]fHzdg琝C(ޖV?@DDDDD>`ˢq;ŖUSyZxes5ZeW)M䇓m{ĴY\j4Kt# c:-*}oU:_+?E7 '|Dq`[@]ύaXm ʪ8ͧOP;VZts <؊Gm\N=r`u_ڮ$.ػ7SEl[HK[e22 H!6lhKU2BՈH戈ijH戈ijH戈$Ww綟O›lJwࠜbNNQbv2r"+O_^.،|ڦ-!{D*[#鲕#SN̛^AedD_{݁{Zyn?ú[bɸ'~jDX|QtFN󊠼0,?Pӿ*]y\莱q,&S6۹/؄&jE{%nȦ O;gsXj6|r'3֒1:4kUaK91 sl3xq< kKx1L\[@\3wu15t}f)qYH`##U4ՇφfYNaKR)("-mii+_osm{bXnq6%AFNKTLGrNNrp周9""""""r!jc*ݺNfVKQ_v2y+C{@U'bFdz`9J^>L_Uftc`тå6KuDudOWνz g 5:=K+K_p i@<͘-)y#&dXbc+$y R>Es`Σ-DږЋV*=.&"""""rea9Y|ROZqca]gC {*ƓzӾZqڢ*^W$oqORIJ.$rϰzWJΕC(=׷WTpH89Mwc\L`bxp2 e8[`#?<O &f{9򠒝ԕЪ'ɺyA%mfgAvv9 ,Ķ87=3a} k#v \W汎ZmXhӍf%{`+rov*Oow.F1{ %\Vk'vXĚh¿ߩ~^:dfb;5]s^l5m?bKqY|*0o؈ȷ8vv?M!Yqx`Sؒ~zZƁVCؼ+؆9.Q <2u*A#;9)"FF3h?ѫ{xiMc 9#""""""#CX wL8޳c[WɌj)9J+^^J97-81l;j1Eژ`V.>އQJڌbl,ZpG ,t3 'fa&}ɜPD=ɅXp i@<̑g؀!uST;_< fh`<ڒAmˉ\+]ݛT:c0?a/4',*ȽgK=yjō-u eHiXRrǝzu{p}jm^8ǿ\.G3LU'{7xJݿT*{)%c&rBCI(,u|:Z'w*r$Ŧ;_F~x\郧KyQfVLȴAx3Sٸ#So:Sb.$';w_5eaw.Sqķ#c?;"tA4=7U|L00(ɻ L7'h( c噊Z Mq3O|*[Nʝs*kůll~k=ny!sfaDŽ XTAX j8_78sX BkzR̳$Ж·In:ن96NG=ʹ8ˮ.G9V8sc&ygNaC[&HacώQL݂BQVn=Xj#*J """""RBΕx<1OFa;֭Q, 3ɛHH=G,áXr  ^ʟOq|v%q^CF-Pr2ߙ{է:i} &>Ha(`D㟃d ɤ~_=yNwhdN}~͉yIO.|Pa5GDDDDDD ևhTL୞ch0ZVL6VFs Up(dc~2?ߝ'\-L g_k!d_j*aȳ_ >a4Ca WIENDB`PKRFǏ&fityk-v1.2.1/_images/eq_shape_icon.pngPNG  IHDRw=sRGBbKGD pHYsttfxtIME76'IDATH_HSq?w2 Av_q7q؃#&AԂV0nRaᢌAX7@"}҂^p"<ܟ\fۜJOE*صrFmΠj1"SDdl>ju_D4Mkې <՗u RqlN^+ҬXHSy2#bJ4^Ah"-FĔ3s nuvPxpȾљ V,RwS@%P4 G]۶9o -jcGlB]3%pLGI}||Xvs 0|6A  1e!) Zr=ݛwfqb9 <zŨٹY;H˫g~~ƽݕ8I4޲0sK+ǞR[? }nw`wpq6Ѥshg;,QRv ]SQUQXP@92g+cwr'j+`ރ{b;Vk+^a+#aJYX-X-.9޾Wյ;s{'>IjD\.' (blly(#S4 x\O/e]W`IZ^4IENDB`PKRF{''!fityk-v1.2.1/_images/zoom_all.pngPNG  IHDRJ~ssRGBbKGD̿ pHYsttfxtIME 8)IIDAT8˕?kTQ}5_%"b `&&AlSU>AK!"B-ʒdw}ce$`30F,zڋPNE)'T~zi_1kIuIcw$LĜy9fLMi+J, +<q7w-G2 Iˆ 1<jXz|*[.j-RBEu^\鮹1*yd !&-eIMe q Rم-〥¶VZZ-m՘7) X*-<J5,J, qq]u5IR!k۴E0mݲ>AKf^ rcxe/k=(gD^`\IENDB`PKRFFfYNN(fityk-v1.2.1/_images/mode_range_icon.pngPNG  IHDRw=sRGBbKGD pHYsttfxtIME 9 ʍ9IDATHV 3(t:CG`>nۥNP)BB h6?>d12Zb Uu]ޮi&f6˗Ԛ$ޗÙ g%ш<=',sHDΰUJPDO,ܓE9UyjSY$"p`h3*Jprm/>&@B),xSu_wxmRIENDB`PKRF% >VV%fityk-v1.2.1/_images/mode_bg_icon.pngPNG  IHDRw=sRGBbKGD pHYsttfxtIME:.yIDATHT10 ƞ7Gܥ,+iBk6RL}v=ާLӿZM9o釻{ \ P| 4IAL,5:TE|:tX>my[zMO˽(L.k|\i8 Ui=(*Y-]fV%dvB3IENDB`PKRFe  "fityk-v1.2.1/_images/lock_icon.pngPNG  IHDR sRGBbKGD pHYsttfxtIME IDAT(ύnQT:!Մ%] +%GpE3 tј Mù.hm]xv_r~>Vjv:60L}1 |ߧj> fIۥT*rznG;ޡX,Xur[-u⦴})=&S%D'8 iy,6TvZy}PJ"bߒ1"RR$#!;8 "%k&HJ$ӏQƶAE|<&PqMAȁ=7Lt- )`5HXFkVIENDB`PKRF &fityk-v1.2.1/_images/copyfunc_icon.pngPNG  IHDRw=sRGBbKGD pHYsttfxtIMETIDATHǵ?H[Q/HP)A'K58K֥ETбt (E,IAp@hpˢ>K Fu?}^ss/05%&uQT]MA2~q9ySHɤC,KdRT m$v .P$.MMMdٲiB" x*/Ѐ$^/S"ۇ[x66J$K|>FFFhpKs]zGIy~?}}}LLL|xn@l΄tR__Ooo/==yB_{]1 .7o^`( mooOZ[[e2r455%@",R:V0v%6Jt6U89x$p@ y&cFA{98::R*RssA!*2nq=,//sqqQN.cuuW ,I:>>mZXX ׫@PVDQhZb.ضl6N,z<aVN,t200P9mllP[[LT:m7|y^rQFHzpIENDB`PKRFN'fityk-v1.2.1/_images/load_data_icon.pngPNG  IHDRw=sRGBbKGD pHYsttfxtIME 5o:>AIDATHk\U~d&dlb"-Xŝ`ƕ( /pхQ?Ѕ-B+UVMӚ0!jt$343w|T';_8s=<>s΁]'"|N7WqGloItK~{sދ'3Q O~rl# n@}]pnZ#0 (V'<y wBd< :C&Rnw":s0 6!PRaC6Jiĩgp%r}ұdx6s,-}bkOn ^f)j %qw4y<630K2!eibl|V+!ݪ7.N&&&7![ r7fNU喒VIj܊&̶ry*J$%ZV򺩰R<}E/qpāG}@U9nXYutw[C5TlIqRQv$ĞIENDB`PKRF-J,,&fityk-v1.2.1/_images/add_peak_icon.pngPNG  IHDRw=sRGBbKGD pHYsttfxtIME 7#amIDATHǵT;OPnSt%1.t8[',?80 1ac#qqȄ5bO<,PӦmijqr{9? [o |9?sA٨ ][">Ė0HXS,ه9h[Mamc0~%3-LzuLzu`aa PY>[0t|ӿBvpa Cװ{uHG|N(HXΔ[(՜PTf6 ]~>'9i>싕*<ImWTsٌE"$Upq **0ۿYTp41NG>Yr,3tsAMa|Nz) LEز(el9?;4fnrt+HxRm,Ãg  /IENDB`PKRF &fityk-v1.2.1/_images/strip_bg_icon.pngPNG  IHDRw=sRGBbKGD pHYsttfxtIME8{IDATHR=KP/<[,@,. %KAtVJ! cd"&Mbn9s\%đ?K .~ˆB޾#i6Hx'CВxŚ`GQ^Y7/weP%X$,5O#" C=lG=m:/w "2I|4C TۯRں?`-@QAaUU;__YR.#sfA&RnmӢP)0Ba #<ܵ 7"`WՕe8hស#ut͍l(2$%X_a}1*ĦDlSIENDB`PKFӂFfityk-v1.2.1/_images/math/514668557741b40819fe8fc33f393cd1cca87b58.pngPNG  IHDRM~0PLTE/ݠ{tRNS`tϿH2,J pHYs+ IDAT(c` H!F[b1>`_Zc˪ fʸ~Q<0iC6B9 𪓆r600*3'`Uw077p `UIz L 9 \I lXcf``o`Ѕ : o@+63`ڻdiؗUlE | ]FTD$%4a%jyˁ `0#Q̠i2!`6R:p&>7/:y|@[ tEXtDepthWIIENDB`PKF'RFfityk-v1.2.1/_images/math/db8af72c921cf238131d291006ee474a2b2e17bd.pngPNG  IHDRT0PLTE/ݠ{tRNS`Ht2կc pHYs+IDAT8c` EiQ $PSbI 6t0+6bŚ!Ʉe]q v] V 0$Qx@|uM`^rC7# fsp2Tkco-ܺ81%9c?7mʟ$fȂ(gH#A&e,N*7ۇ`FMdB|LyͅTյBLdE;jcM[.bbn xZQ_=-O8M:#C8$8w:\Pؐ=;OY`փCao:W7)&Ng"<@yXZ蔒"Q<:z:kv H2/3H]d NƯ@>R:Z}}vX_r =;7$@U3FNeg.Ԋ@`~{iiAKRWAs{byNtDoq7X ^(jq3OϜN C6N5q<P!;?5ضӝX3d{X@UDSp++4 @q :OQx~ b aHq[*!q:/tBXuWBF\JD"\<ݟ*bZP3P`8.>dG 4UBӠxJŖzԘSՋ qv{Mj-SOTAϿ._T+ dssPza*3%O(ͼQڳ9IʯIXGGO AϺHٜrPzSܠ8L=iȐݖ4߁C'_3m?%+7$KB^F'\#?%iξ6>.|SF'[o %5;_H>(I&]U+u'B灈l.:;&E'&Q<}D)Ĭɼ֘^-߀i5opB~N3d42əsQB^+ ƛ|>ѕoutA 1չb3ڑj7y,b5)DvCլN3Mn*JY:t. ~N7tiF""7>Al/6ێڀ_5[B!N'"vw~zTaY`(_ >5 .DwC]=APFYXkEmp7Kd4%~q?CiA@]עd ΛYkrK#TP&]Qk|+^L` Cw:i4%#$}7?\KFe7:5kc)?(xXڴqai57LXS-6ҙyAf˛/~ܭvNX&QkvצRgS~(qH{.~$}qR:5&qLZ_ '|yAP|#eZϕZez-,Zޟ@iM(jCkZɠWQ}ş!ә1P]#yPf鏇ΣL8ot:S<Jǡ=7Jc0yԡ 5*{{}}:=S<JӞ׃KS3gZcqXjP&?>V:mto@y8 ֚~(%iOS+LX95kyt:SR_懯=E6= 0|QY"ۖ|yS|m#iOw)|EtPV{ʯmC 1:k.thtPn~ZG~ @~`Afc-tڻ۟ԇqq @(}UӨq~QUi tEXtDepthP$њIENDB`PK'FیFfityk-v1.2.1/_images/math/0b5ab196db6349cacd88ce55321b1830f9ebc304.pngPNG  IHDR3C3PLTEL tRNSHt`2{ pHYs+@IDATxٖ*E!Q `'\yU%3KQOÈ슙U Q>;v d!dg7:s3f#qaA0 kMiP-I&^عg"SrJX qa.XY`f݁=dfjk? *CV#iEfJku1[:5e`+KfA)y0 1\HMbW*Zĭ~ZfEsNν3ˢ&]jU Twg<~f@>5aS< svRsG|1?0qROM*d,zkm.@N&^r[uxנvDZSq+cUJC2{ `!npr/E>P9~|^y'q?| u@ԩM^gݳInP)z6Zl;*$:ӞLXxX2 .j[dZ ?7:a׉[& 6Wdvm,r}!Ux ?}wgxR&ί yAx&O[`BMw2F0,iImhۙE X";tIKpĒ &R֐ҡ_`<: L"A(bV8|D(*xX"7xX" &xX")x?n *!Ddq~ *);]'c-̧7l9`-u"qs Bh 63 `)_ tEXtDepth*IENDB`PK F0Ffityk-v1.2.1/_images/math/02b58ca52e39107dfad1e16baf9996d993246743.pngPNG  IHDR@0,0PLTE/ݠ{tRNSHt`2z. pHYs+IDATXKhA$ =xPlh (,bA%(*hBRj=ARb=(>PЃXh)XEAkzS,!-T qgggfzX2˿f7,X$}%SNh/W -QgO:]c}QVIJ26sRqxփݪt+! n ؄d_CY ٦a-̲{;Sz G>GN"G.69_`]:Ed*AHSCq m.]rCz^z{=2;Nɏ؏+RsΰХ=G “m:ll7q vP.>$]I) {&oG*w?ߕLI]] 6Hp^4HoXsgfM>4mAV-H/?5DY_7*I6_ c+~.POG7QW>琢j)vygyjϺ{㸨4WKR;KP}^4slu,B Cҭ2d{Y,aeJSXnȖ⑁m'5հތrbYbȖ0KFSa|ISF%r4@5lLiFfe&' F,ljYWiV6|:QHԏ`n/}Z;Cɗ}r&dNĩ덷}}/B>awէ[pm̱j45}h_@`{Y kaaeD'=}zqdt""xĄ&᱄Gҁ$íu= &`{Bdރ] H#7!Z,N^qt#Ɣ7͞r|xN>`ғ)[\o+S?MO}ĝ[WuL j5Ȱ+#-X 6_b122n ^U2nȵ'![`p Vm8DB9W![m|[unQVǵ~z&oSe(N]O(Ls)Q]~6y7:7n:w(a)WּnQVV7[|#Poۨ9ҁ$Bus9sjEɿE`fj;B忰I}{@;qKDq W+ۦWɭ(c#na)+:qrtM.P$8x}?Y:!me=~kk^ 9?ğA)rt@:!-Y==="}UgGG|% plYH`̏츱\u}$68pcan^e s d\Gw苎>PJl{+7IlY,SA\ 9GJ=H`Bp6c>ʍx}p-Đ-8QO *{RYX[vIWnTۯ2e=RPhXV _W=uv^ƨ]Nj4RMxز)wD8mH~:5QINT:Yf3ܴNhfj'P*z{;^}b&{QpЇ0,\Ωӗ' # Hf}x ArGx. Hc;zWbF,ꂚEuEsٚKJ JBց "Tңea }%uƘU:fXψyYPD1nzXY]iQM)Uô(D hFޝsxpJ yh??l/u¹;:C8&t^lg S*^w {ڻB{}=Yֻ"!pǩ0Rwc1T淿E)w|Ks.GQJ?lnRwsq!܍?u6vT[_5ihW tEXtDepth ^YIENDB`PK(F! nnFfityk-v1.2.1/_images/math/c363846f9114db62ae575be00f981772ccd53f96.pngPNG  IHDRB #)0PLTE/ݠ{tRNSHt`2z. pHYs+IDATH͖?hQǿw&w5A ]ê`tP"B[TQ!I%CT\P*8f)h){w ^^ &z=df$c4~l'&9D)$3q82$as4~:֫T3Q@SN&߹+X4$^G f6IxZ+)~0IVuUZHސl>:ҕ)>^bJj>}>ڟ0.Σ˞mR}PLk"vL]zi=I_&`'KO[z^ޫ;M X8>$VĄdQKt"c3X81PbL%=66ׂ;,eգd_ފu+_^U`J,T*[|I$lxJ(+%aY &Kkaw{Y9 U"gJbQJfMHJ.Ox3nJ 7qUB1qt٪7+OWfGHJvШ݈ИJNY1P|DJFXMvDbXKDwIr?g<]#B?JJ> K͎X%R9F*H%U*5qlk  { tEXtDepthIENDB`PK$F/&Ffityk-v1.2.1/_images/math/e0923e2fa1c752337bd1b563184846570beac113.pngPNG  IHDR Rio-PLTE:tRNSt2H`7$b pHYs+ZIDATc``2a 400Q]I+3ac [(^xu"qcgX'WW,Fc@Ϯ tEXtDepth*IENDB`PKFu*,Ffityk-v1.2.1/_images/math/d44a0f74bdcf5d93e31fe8a0dd1fa0625156dd63.pngPNG  IHDR VR-PLTE:tRNSt2H`HNos pHYs+LIDATc``2a 4|]$>1`-x70pHm}?) tEXtDepth*IENDB`PK"F qFfityk-v1.2.1/_images/math/a4df609c99bb782713454bb451e411fc02e7100d.pngPNG  IHDR Rio0PLTE/ݠ{tRNSt2H`c>" pHYs+YIDATc``2a 40`,PUUa>c-7l9u"qT'0K'b sY$ tEXtDepth*IENDB`PK#F<Ffityk-v1.2.1/_images/math/1256d2d6adf6ef0f67fbb11cad708596bbb2e516.pngPNG  IHDR7$0PLTE/ݠ{tRNSHt`2z. pHYs+IDAThZUAw`%Ff"qt7lu YD"ץ䯨$ ;K/T?DTBW,+{y;3޼gg*U;cw?kxY/rrOtiWʼ\b' omMֿ̲PN~Qtr7帤{Yœ /,i֯4}=34OwW2ïMue #0w%.N}=iAE-P^:cP[uPpťG \'R*{nyHʫ9{flYՆ>a , C$264`t4l҇Xp?ڗi@7˴v#,9{Jx (`QF-j4jqmMؚ V 1h=ҡJLxނ*]/FH?Wngv}ay3i?Tv&_qˆ)S ]>1?XEd|‚l?) 7xL%)Ot  p*޽"ߺ!X.xhvY: E9?#bZpgn,{`х j}0Oژu52khхk~jYsa ‚v.$tSlwy9i+Y]7}4٘54ʀ2kKXЎ(j?A{(¹l&/lԘ2k.,XGDҴߺ܏\G6fm j̘),rDܓI _?ޮ ߆YSac _0k",ָSa%C}kIQ̚ N)|YSaau`S!d6wڬ~άʼn;<.2zFt W\h){/A^˥u/C7>ku =e\ tEXtDepth'# IENDB`PK!FHt__Ffityk-v1.2.1/_images/math/7967171d489823619421a07a456eb6ba1fa09b6f.pngPNG  IHDR7&0PLTE/ݠ{tRNSHt`2z. pHYs+IDAThZoeθnv v(mF&H7YzK A61)]Rb Q;>ԗ/XI ܔ0?^ƾy<I4W4MM&+l2k^#7 Byyo 0ݤ?}5SĔJL$;W,< 0 okC_Q\WTyE\3]QWQRf@#"[0CwO/ |;'{:? yA#/;m;ӏn=|$Ih^H`0fATo`>~ҮPLLsX H"u#heR^ AfGaP* U䋐@7Ax\mGPiE>7XԐ؄+Fsu߀Cx&7l/Pѿs$1@#lT{RRWic^`6đ߭`. Ʈ&`BRJ {r)ujQʃQw*VUyBl@7'TGM#ڕSj 1Sjn8)W|˰VP: tEXtDepth'# IENDB`PK&F~ +Ffityk-v1.2.1/_images/math/661356660ddc5c3f606be9296d3c031df7eeceb4.pngPNG  IHDR 2g0PLTE/ݠ{tRNSHt`2z. pHYs+0IDATXX]U>g2I"JcUڀ5B[YXlobvۈTѦRB Xtq("($-?}ˢ͋HmVY>mZ;Ln̝ܙo=ιª`lY3Ϯ b&p s4'8\Z[lWIv3GT x8q{ z`+ojXwnGƺ$>Ę8 8ަo g\q:÷87wBw@HFyjhoP5GUzЩ3wZyӈc͌ѽTI9-P/ _%[gUTn/ U?:~q3}t\=d?kc<~(6K0 *I: ӍٗX rb&)Q<"Γ}1uD, ß'!Qqir% ;`1sI6ߝ(!d NǯA 0e_?bI)iߓ(n 6ckug}(pI,>v8K <ݬ])g~$~>+ YRq t׺H|20WF/q`SeXd36 ndL:mLzvwjD49;F?t2F<\Nſ6,c%M|K8Z  &>,#%mfV4-o0So4L*+0?~` B̪56 ::Il+* IA-n4;C _b gbX,֠)@@MFek-27+^E'Tդ4(B| 6KC <ˤJ֐lOA:j8D3Ñp FL_u&ADm;lbأҺ@hqn4ym})ju+0~Rx\IZiA@ <~`(k\ pR#+zK+礣I!HD1eTmG]asI's|e +q`"l'pcVRů}K|Fy_yk{8: %p{-Vzb?1X]}tib]88e]AewT6,B8'6gQdR_ݥN4<z@c'yBg)ߎvbѕ)mOX&O[\oaY!jo1>GЭkaaUUCz'nP0 tEXtDepth'# IENDB`PKF?yYFfityk-v1.2.1/_images/math/c63785bdaf96c8a0319ad19bb2b258c425153bc1.pngPNG  IHDR7&0PLTE/ݠ{tRNSHt`2z. pHYs+IDATX_hGǿ{ݽKNM H}h E `Bp/S>AB^Ym@"WmzO[Ň]gv7#;Bfs3]˚G@%bYn(y)(fCjߊ@hu#xj0·e!þj/&M.ls \ر4/\SRa֡`=Zy{&Ys<{3PǦǾgp{7ΪG8O^hP2^w[ؚ++NKu|:ɍ376}tT<mpٲ {Q<99cŕ,6vy䟶=axbrٽ]iٝV^簤c!dJ\pl2Amx-wػc خc-%=6Wc[73!vˈ9==+)Su Sܲooц|A>9>|+);j-Q9r70ʮqE<ͺgqtGU9&@b'fGmJ0S⁾ڎ3 :1MBiWtSPPm :d;ݩ6awM˱u0zhDlf_+ZOz='ڼpD'd)٣ɻò^9:^@X%fEы}Gَboqq5ڐBQFPsAlb"whXB8=U՟|v;hq ]HS+h5uKM.jEH꩚UգViͬ^:LZS=:RE5`|UofJOj֣7z7]`u~I [XIhf1 _ST-[)1tin8N( tEXtDepthP$њIENDB`PKF;3Ffityk-v1.2.1/_images/math/52b1bfbee8b72201dd7b677f47d1e44c19f76083.pngPNG  IHDR ? 0PLTE/ݠ{tRNSt`H2O pHYs+^IDATc```2b 0eMp', X  ,%Q+`P1h􃂯D4ʂQΝ[:S^v=93 ] yB!n#v$Y39$8P-6999999Y:7ubo)s>~2g;x> OKs;F&t9AO؟Y鵋cA~JVźqTח,YD2'Z!9gyBaRp80v=I$`^ЫPjA&p~sog[y4p7M|a{yܔ6qg9_Ki;,bײghgʂ/*83nމ3e3T1KċG K7Bʤ`q8'Y (u7YhH#9ϩQ6g}5ZLN4 !sjs-ʻ)L_RĜ!0s]L-/o8ӽ,ycpfY: ^O&hS Pܟ)VZXݕeِ M2vJTIf"<"sןg33\.^L'ҹ4)q7Z]6.yU7,C/X$q&+-6RէU1DHzuB+* 5FcK@6v\#i{\h֛z<ύو^5/UM-g G'޸I}Z28ȭo]'L{ tZ7b\]mQ/fr85sPN"UM#Bbe٣֪P{ %S'ŏ҈4ݝD܉/Yep0K951 qiDWMĉ,_W5EsrK_v4KsocԺgłӝĥG4B5?7;0~wWL%Ï< wys \ZgOwT9oA1+G}\aE9a[ɗWQ5<9G\c eSBΩ @}qi4лW 2Tva$Q./Si>>tr;T+;Tv-ڍ%rdx/?WRSHsVXٓp- C>qM)=hلbB tEXtDepthP$њIENDB`PKF{:Ffityk-v1.2.1/_images/math/2982f903778fcd237a209f4ce59a67472f237e86.pngPNG  IHDR7#_0PLTE/ݠ{tRNSHt`2z. pHYs+IDAThݚ[hU%3d 6kZ֬+M"vԆv-T%$ ԩhK7mؒMɋA(tChf339gΟ6>FQkѸXsZS:7Ss9I:*$ItVv$ ;~k@ u=%&ݮG'3,TLRuWO>JIfv9:yCS(m!vK/ARNfi;3""AސGJ-z{%/;|}9"J'ɟHnEˀga&A%}tᾁyh΅];^X *|YRI1)>DJ· Bx" 6$<F@d &9= ZPB/S5u~PJILy"7r̀ށ4U&KB]Da)o&Io'}FnY/ RI)WRJ*+ 蠻$0`=|@rqee$&p 5W%qtR w ([KҪJ+2Z;r?T'H H%wa妭si5ILI$XLsZxQUTIܱ$$c7ܤ{bAWF%8{Arr $l.PI15/ܢa?M3:/WEZK?oT`kg裮=[>|K݃"Z[fb6穤VNw}:xaH0upݧ&*2)#j"w@H uEyG'NǡI|E$Vqu(*H]O0~ft&‹Ht Qw &&*e%;䈺h3_WdTR]LU\O4E%fz2G] <"׶yQ~"ҢԀ~TxGhLjEoFZ* @OZ2**hNxgtiy@RCOZ2*]̤%R/s[}bh% :v^$}BfK+u9dq†w9ҢjRoqQnŅکnk|Mb%%m= QRyVliQMnZ_u[IoiQUnb &746&U5k7HqYLBujCa>D7 c>ꖱd75Vm EM)GnXq2s"h`1`a8V[#/JV=F(}H=sJ-^Z{# )KMqTfF6< 95jr#{a 2>t8Jᬢq B!ђб1(:%^G$[-M?~HǹŠ戀=ʙj&E-Vw%NL)`ڔ.?_+@ќakkh>J7\b;n&ẀepH%N+$MS9?h34\1$iy3To gZϗԃW9e'Mo;k3rŨm nx=W+A3I3)P,agy_- yBJEO1z6eA6ɠU:VIeHpG Q RL 0sz@p[ Z3S.OsLP*uS}TNWtDI⃫+䏾9YV#POC%s-c^n5u W?3SX? (?j3$}p tEXtDepth@D9IENDB`PK'FE_Ffityk-v1.2.1/_images/math/de15ac785d9c2ad7268d61a4cef43e1bbb58440e.pngPNG  IHDR.Q0PLTE/ݠ{tRNSHt`2z. pHYs+IDATXŘheǿw]59a2\ZC"bNV9d qLmE4J-a&` KTdQBcle8 D %qI@Ws>|mz }5We9?Bz<[O_Qn "0-FG-/'11͜q7}(P^-݄6e-o b BxFkv|oJx{1`4bt_>V0vh, Fjb@iCD͇'y@qW'k̬!"z~M,8W;QIBÏ1!d߄&v9Vbb.;g>ބu-<[ ݞgĄ8BL/eC}dpxSV"~PrEhF/M%U0!|)J͂!XlAV0BV1Lk&DHC(B1*!>*Ĵx yJ!EVCJ!ʄ>^ RQ_p_+]ZZ \CeFRJ 9$ }R!sG2D`6pQwa/Q$ K6dB{D<,9; {/8O#~ǖomMh9ĩ Gw`2EaUE?"[ߔひC08VqwUqu"E냠qI'B|Z Dvŗ:FG p08ƯeM7="v(_3a'5u?ں} tEXtDepthIENDB`PK+F7Ffityk-v1.2.1/_images/math/8bdf5aac2c765e5132ecd6cdf51b546dbc541583.pngPNG  IHDR|(/l0PLTE/ݠ{tRNSϿݯ`Ht2LN pHYs+IDATHc` x/2"|, Ϊ@ `7@~^Tk+ uXp tt2MP#Ψa<Ѓ]qv.Αсr$cK܃{|6\ V{M4,AU; DjN O@kZ -U0B^. 'hyq cAA̋Pu!3fHV]nFYe411ñ)10b`Pq x6ac88V$n\~-U͹g(!(*-Y`jg|Vٚ-!< ϑmf]"bI` ~@j{9( kR}c8DBJTVCOE")͹> S0i tEXtDepth'# IENDB`PK#F0C C Ffityk-v1.2.1/_images/math/7f5a59ea60cf46901322afc577c27953670347d9.pngPNG  IHDR0\GU3PLTEL tRNSHt`2lJs pHYs+ IDATx흍&6 0,JRV?as4U^!\m2"u*!T,v"0NˤSSSSSSRRRRRRTTT<( W`~@JyW`ʗ@$`1IW[,DwQ&LesKD|é>p֣7tH$ŽS|˔c3{=0*Fh4G D^ ?Sv`8ݬCԀ; hRdH30lءM ˁ9C)E:sFF˜C箂Da$mn`vc7C^s ]H;&MRRgD"} h :|/(!sizNKK;rjك`8P`83 Wja(isK`E;0V&ham4 &E(Ds~}3k V!2sM1u ߴL&;֛= ag+J·)ܵ Bz&CG' ׁa0\`0tN)#!-_ƺtB4Lg?\ph rIқKvS!?:ʂj0mxȽEޗ0+&zBJ? C;sl o#hD0͖<@xo Lʴ!q WK; %?E# B#&;'`D)SlZ'~F!(̪vhÅK; ʒvHJ dOcEtK`RX? &e PqrjokgInAYv s&P.Q]nˏL@/L&0[;K!1XD  FخrjΔ55SN:(`(u~Ma蚫c|+XhNXm`s*Gv, W T11|G )Wfp3-vLU881K.KdS1⩗d=L?0iE.y6*0wݕ%J8f"Zژ0:2a_ʩ, G Svv!Z-c^0k ʔ=>5?Aw.irG+<W\t_`/K{'"5Ņkفa;ʩ3\ Z:΅2)|baign`a*l{YW߄X!?~ˆ?l%x $ZGKbQh|1 w0? * 6J/Kz"gI&0Z3[Zε^?$`r€, 4|~UPsqgU9 י'j0"Xvq@ Ү>Li0t$)B0e/B}ɅA9aJqg`p!.ǢԊXJ #8ar] |1M[yo(t2s\`[D !s&X%!4G#L5vE4 m.W RʴrjYt 0פMյ?{J69RvFΊ,hr!И992/2fb o`&1)$C ԓ?e_O귧.0E 0EoloDK^HA]X9ap`pc*T _kiao_HA]askDG ͏7o?٣$sPb%۹0Ѫc~Q70bģ܆~!-uu=-`ץw6#}QQ{^:ENC9n`xp['\ 0Ѫ}~,$ߐIm>^A=I5`( %DdmJF}~Er:-i>~MZ{եF-_)\`BwVݷ-o?ǯHw&ۘ=Nx.=G6avӎn] Ej?[&rt.̩ \N4`@ƪUKB߸Nv{8QH!܄UDϢwa , tEXtDepthP$њIENDB`PKFI %Ffityk-v1.2.1/_images/math/0abc09c031aad33cab2ff306a740334cd7dd30aa.pngPNG  IHDR72*0PLTE/ݠ{tRNSHt`2z. pHYs+^IDATHc` e 10P`7 l Ph@ 08po<\(E@lC#nl440F/$PhŒ A (2!]"&g`YFS2O``p `@/8O<h`x$32rre  @P%!]nXJop2dΖA8r<"h"r`X@&5ę k W[l*\H|q+`#y&<j@xm`N=@̪6 a80pm+T B~> `L+ ~ , yP) [&0~% LJ< ƭ &$Pr`jk)_ ߈5T &0*?v7宋 ( :`)A܀0/j(6g\DM,n^OsyH ?b18SOF8*M; f}>`ؑ8}#CRqT:g?gFo$Of:CY7vO_' Nl#dAoԨԦbhZBs ~rq},'x~(3]{&~=T1e$XN93VL1t[NMYIXN0E; aKCXN2D2b'I8-FXח\fD3uhnNrA*VIRf"0I,N"g'ƕGfE4W}pR-fÍh6%܌&9b7ELs"R-VGDthߴZS:h`8Z'S:hh:"^йgDSڡ8[3twEbh:Iν"%V4tz{D4V"(1KhI8SCRg@o_ ig YjփM2Fw tEXtDepth'# IENDB`PK$FHLrrFfityk-v1.2.1/_images/math/110b0dc95a5b0f238a9e484881ff372e727941a2.pngPNG  IHDRF{0PLTE/ݠ{tRNSHt`2z. pHYs+IDATXõQhEǿeu%EM,6e)`6zHgIJ EY<媠BZ@AVЖS_J+Ї3{v~fMTI9j _PO)"IWʀDB)GFYrr֣Dú~_Xv?t ߨ|!K~&?}> $Vga4yZL,~` ,5-X jٴ4ȵx:9TF3]ձ鈸oR#5R q"[ [9h;`r|}K\{vD:;$- iP%JkQ%yM1~G-觽 ]G3?l~7D\ߵG|9:UеOsnL[Q4=lOLu _ę ];Al v383SvᴿK_'t!*L*aN>Nun;z)qv:+CqT陓2>W4h$@픈<>EqT].tM(i{ϒh$KM/rɏvԊ*^sDpW|S/RsQe&z"v$.bHȾռiKth'7e٩t1[ܱ'qA'$I8h 0!EHSNm\Z5&"K!vǤV?q"2r,XN'99eH~t'+?{"}NE*gA~tCaHf b0vD^.j_ԼEU<`RY}ڢG6o;x o,Qf` ^n#EBLU4"!|z Q813V Q5<>\K#OKEX%wg < J X>sɝemAϙ\roRɝoLUxe*ayPk{e*v:]@-Cl|PZ2X>f]Y>O0&` X>kd|Poex@  mt8L tEXtDepth'# IENDB`PK)FH#l++Ffityk-v1.2.1/_images/math/143d854fb865a4fb5147d3cc5d31426941bdd597.pngPNG  IHDRz-PLTE:tRNStH2`ϩ]K pHYs+tIDATc`C}Ŷ*}b 01  m``e7`H>eU, 3OƊSCxPC a`hb&g tEXtDepth N%IENDB`PK)F{  Ffityk-v1.2.1/_images/math/038845d9aa07cc91c645af2e46b7958765ddf3e1.pngPNG  IHDR6V0PLTE/ݠ{tRNStH2` pHYs+OIDAThKlE?;&>*9P)DKU *p(F\"UᕚG`.ĤBU_z@-CUD#UN$)mefwv3`x|VC+P awkB >֪1 áhvZ5^Pt3V Ά,$7_?+cOVLkLq'J_E0Iۚ(ѼI/n=u[{8!~+"ȃz>HrnI!Z?ӢX].]E}y4؈\h$׀ʸdhABV| Op/}k8UU+U-"YA¬N6ŝRk*M=j IfD68xY\ܩu}6ŝ XZ&Woi+mUBu[ ڠPԛ? A6ǝʩih BW8 b2jB;>vr¬Ud;Oӝ&e4Ѯy0R 7sRt^Nn7疻dJyӟ,=ةu{e<I%j sAMY֭iMѦ-4)v޹̒\O uz7SLR5 c$zB :K[= Ӕ`Ӹ*3*;N gz[к>H:IB_0)ՆiغCI<'3-9ם=4Z T'H~yJY(=O}q{$A.PyzGw4҇cz@! ڢ(bjf?lE zѪ"pMU<m~s%%z–ՖI~2u[QQGa̿ P!gsJ2'b#`DR#.Ʃ v 33/AdpÆDY)jD%f#A #S Q b0]Mknq]htx" z9v2K*Db?@AnM>~q%nMPmC^ :1I7HI}z8n|PCtD=9?>#ҝ؟/ S* yio%J8!;8.$y :O)k* V ZCDzG?DZ4BzI[l(! ^fy'md 8Z !-oBlY ܍yBzrO$hp5{?)qOQ>_;f ussY|СtIo }&@Λ  ϛWF=yM>י tEXtDepthIENDB`PK(F YFfityk-v1.2.1/_images/math/2f191ad63c4a54722cddc484340612deb5397432.pngPNG  IHDR ^ql-PLTE:tRNS`2tH酯U pHYs+DIDATc``Tf ```0 @X̅CE}f `0 g uw: tEXtDepth*IENDB`PKFRFfityk-v1.2.1/_images/math/b1f0d5d72728cf446219bc974304b25c15129ab3.pngPNG  IHDRO#VM90PLTE/ݠ{tRNSݝϋt`2HP pHYs+"IDAT(c`|CCC7` >HQ(~CR`|aB`ƏZ00AQbΏz/TO@q3W L"UaxN:/\0ã r`TđKCh PIdc(o41m  LA 'A DZ nY@M U F Xր#|_A|P;Mgcc?4 ge<XDY* tEXtDepthWIIENDB`PK%F\+sFfityk-v1.2.1/_images/math/90709990f459b243f1d3c1dc2256439f8e783f8e.pngPNG  IHDR Ol0PLTE/ݠ{tRNSt2H`@/y pHYs+LIDATc``2a 40PsȘ`߰u"qu`K?A- tEXtDepth N%IENDB`PKF3`iFfityk-v1.2.1/_images/math/d6e0133ff7c9f0fc1c1e78c65ece0d278b21384b.pngPNG  IHDR 0PLTE/ݠ{tRNS`ϯt2HZ pHYs+AIDATc``TvUc``/`;O +00`fey ' tEXtDepth'# IENDB`PK,FjEFfityk-v1.2.1/_images/math/57c598b9054d3369f6280a1e55ee58f9c05234b1.pngPNG  IHDR0"2G$0PLTE/ݠ{tRNSt`2H c pHYs+-IDAT(c`h*d!`K" o V,δ䘀cŀC"D(TLg߽{w w`]M;WJ>a<h4121(H@yA9 " xb,``/ " xe.? żquHh+RZ(07kqd3IC3R2>>)ǼW╧ABcX)'\ LTt tEXtDepth 8IENDB`PKFŪFfityk-v1.2.1/_images/math/3262f202c4f0920b5279a9135b168a48b3168e94.pngPNG  IHDR&0PLTE/ݠ{tRNSݝϋt`2HP pHYs+,IDATXVMhAv&f[W6V1"'VAxQ`D/ dAA\J1DҮ=EBmiKu$JI6 oo{oSҿJmaIϖ\g8kYM9?)hXҷf'xaFp q =n>3.5c4A( E!]eaf'[.h儲]nS̍ϳVvnu>*(h>YVDpLc4@ w.c`d@X,=!jc!:-츔_G0IԇGB3`|MH-Rò$3Ci4F0҄+w 9!5!2]1f@lCXl+\cFWgo{R)y{3 ^u_Fr)q]CL;͓Ksԓ9}Tc +oYR,_'pNT m}?&:  ֝,7\t1#qk z&K.:%dBܒ 2jr_3oR(Q[D߶ VbX9 tEXtDepthyIENDB`PK%F /?Ffityk-v1.2.1/_images/math/8af5886035cc95e80157ce63ce8c4366d6e4d058.pngPNG  IHDR Rio0PLTE/ݠ{tRNSt2H`c>" pHYs+YIDATc``2a 40İ,C@  x7l9u"qC 0c> tEXtDepth*IENDB`PKFQۧ;||Ffityk-v1.2.1/_images/math/76f26fea1382b952b0c09f9b6b30db1efdaf4e33.pngPNG  IHDR570PLTE/ݠ{tRNSHt`2z. pHYs+IDATh_hEݽۻKM$ jC>ĊhVBL$ꃞDkjjmJ_JSkP=I->$:ݹ_`7f3-@baf)L4[scX57O1ZfTX ~t0"Z:Cbt͖X-ĔTbaSqx-6uBa;nS4lA4K M9jp›Ygg[՚&[RN2[q|Qˆ셾g+tl8}3~4>D/5@٢yv{Xl.Mzf],/ȁ {XX5 cID-?\s~m>| S^ׂWF5hz&sӄb@6=1) `;I،:y l/l`8 J;7 y] | j-WA7*lQ2RZ@3G!,k >ۣoA؄282jHP Ԭn!"\9q4ldJ l(~Ek6[j&"wuI4G ~94<?>k-^aN%E{|,gl)f] ~RpGIzF "lio|]~sVrv?v2X{EMX [%_ҥݟT/7a6rD" /w 3ŀNBt6S!dC趑PBYv!626lfodoTI]|yPXƚilπidbȫeJlJSDGzٔ&hljb˘Rnd ~ٌ%Y$b:RlB!bލ 11NH})P9 #!X$lbkkjC$QHXnd!:0ۇˇHuԠݛHR++b(okj{jDdK{+ \; &kl]Ö"lJϸ6}p 1=([ĽKD3lije? Qq )T.y,#v`yl<)%J,]]6-fX/ljѻo6W]gH*pBiӜ !p6f tEXtDepth'# IENDB`PKVF^'3V[[%fityk-v1.2.1/_static/down-pressed.pngPNG  IHDR(-SsRGB pHYs B(xtIME -vF#NPLTE__________________________________________________?tRNS "5=D\_avbKGDHaIDATY0DK!̯Qc(DFYsS06'[?vӫf>"SCu|2(X+NfJH9Soj*IENDB`PKVF5Ffffityk-v1.2.1/_static/file.pngPNG  IHDR(-S pHYs  tIME  )ToPLTEhsitmymzn{n{rρب$tRNSV5gbKGD$lIDATANPylsL S/|*S<"H%G@6(Üpm?yC+(B(>GDHW'oj8IENDB`PKRF fityk-v1.2.1/_static/mouse16.pngPNG  IHDRasBIT|dIDAT8uKHTQ9y4i4#QD/dZDDDIFE3Z hSNGZTDˤQAb|?ƹ/=-20q@]]]bEjjjU8P'Ǧ.,*4w|s 'ꁜ6^\ rmss%+ݯjk(Mn |Jw} GήɿCn8 ۍR!J@yV ϺT{{8[)|&Ț 's\ zR+tfiQQOSoLa(YO=016QTjAŴj*tL٨X眍iH2ysEH bh[2y4,I݉l'2,>3STT$c"@bF7 )"Y8ΑhRbZ[X 1el|  G<_[HMKKK؎ ,8/4MGJR 0M%ҵ!lKN Ѥ|\2ӸB:X3S(.yyFhr(h|Ń}{[8#[bZ[[Nil2;a== null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}}; b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, 1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); PKRFHm\6{ { fityk-v1.2.1/_static/fityk.css @import url("basic.css"); /*======================================================================*/ /* * based on sphinxdoc.css_t (BSD license) */ body { font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif !important; font-size: 78.09% !important; line-height: 150%; text-align: center; background-color: #BFD1D4; color: black; padding: 0; border-top: 1px solid #aaa; border-left: 1px solid #aaa; border-right: 1px solid #aaa; margin: 0px 80px 0px 80px; min-width: 740px; } div.document { background-color: white; text-align: left; background-image: url(contents.png); background-repeat: repeat-x; } div.bodywrapper { margin: 0 240px 0 0; border-right: 1px solid #ccc; } div.body { margin: 0; padding: 0.5em 20px 20px 20px; line-height: 1.4em; font-family: Georgia, serif !important; font-size: 1.2em !important; color:#222222; } div.related { font-size: 1em; } div.related ul { background-image: url(navigation.png); height: 2em; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; } div.related ul li { margin: 0; padding: 0; height: 2em; float: left; } div.related ul li.right { float: right; margin-right: 15px; } div.related ul li a { margin: 0; padding: 0 5px 0 5px; line-height: 1.75em; font-weight: bold; font-size: 110%; } div.related ul li a:hover { color: #3CA8E7; } div.sphinxsidebarwrapper { padding: 0; } div.sphinxsidebar { margin: 0; padding: 0.5em 15px 15px 0; width: 210px; float: right; font-size: 1em; text-align: left; } div.sphinxsidebar h3, div.sphinxsidebar h4 { margin: 1em 0 0.5em 0; font-size: 1em; padding: 0.1em 0 0.1em 0.5em; color: white; border: 1px solid #86989B; background-color: #AFC1C4; } div.sphinxsidebar h3 a { color: white; } div.sphinxsidebar ul { padding-left: 1.5em; margin-top: 7px; padding: 0; line-height: 130%; } div.sphinxsidebar ul ul { margin-left: 20px; } div.footer { background-color: #BFD1D4; color: #86989B; padding: 0 8px 0 0; clear: both; font-size: 0.8em; text-align: right; } div.footer a { color: #86989B; text-decoration: underline; } /* -- body styles ----------------------------------------------------------- */ p { margin: 0.8em 0 0.5em 0; } a { /*color: #CA7900;*/ color: #667777; text-decoration: none; } a:hover { color: #2491CF; } div.body a { text-decoration: underline; color: #00325B; } div.body pre a { text-decoration: none; } div.body pre a:hover { text-decoration: underline; } h1, .h1 { margin: 0; padding: 0.7em 0 0.3em 0; font-size: 1.5em; font-weight: bold; color: #444444; } h2 { margin: 1.3em 0 0.2em 0; font-size: 1.35em; padding: 0; color: #444444; } h3 { margin: 1em 0 -0.3em 0; font-size: 1.2em; color: #444444; } div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { color: black!important; } h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor { display: none; margin: 0 0 0 0.3em; padding: 0 0.2em 0 0.2em; color: #aaa!important; } h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor { display: inline; } h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, h5 a.anchor:hover, h6 a.anchor:hover { color: #777; background-color: #eee; } a.headerlink { color: #c60f0f!important; font-size: 1em; margin-left: 6px; padding: 0 4px 0 4px; text-decoration: none!important; } a.headerlink:hover { background-color: #ccc; color: white!important; } cite, code, tt, pre { font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; } /* p tt, li tt, tt { font-size: 0.95em; } */ tt { font-size: 0.95em; background-color: #f2f2f2; /*border-bottom: 1px solid #ddd;*/ color: #222; } pre a tt { font-size: 1em; } tt.descname, tt.descclassname, tt.xref { border: 0; } hr { border: 1px solid #abc; margin: 2em; } a tt { border: 0; border-bottom: 0; /*color: #CA7900;*/ text-decoration: none; } pre { font-size: 0.9em; line-height: 1.43em; padding: 0.5em; border: 1px solid #ccc; background-color: #f8f8f8; } pre a { color: inherit; text-decoration: underline; } td.linenos pre { padding: 0.5em 0; } div.quotebar { background-color: #f8f8f8; max-width: 250px; float: right; padding: 2px 7px; border: 1px solid #ccc; } div.topic { background-color: #f8f8f8; } table { border-collapse: collapse; margin: 0 -0.5em 0 -0.5em; } table td, table th { padding: 0.2em 0.5em 0.2em 0.5em; } div.admonition, div.warning { font-size: 1em; margin: 1em 0 1em 0; border: 1px solid #86989B; background-color: #f7f7f7; padding: 0; } div.admonition p, div.warning p { margin: 0.5em 1em 0.5em 1em; padding: 0; } div.admonition pre, div.warning pre { margin: 0.4em 1em 0.4em 1em; } div.admonition p.admonition-title, div.warning p.admonition-title { margin: 0; padding: 0.1em 0 0.1em 0.5em; color: white; border-bottom: 1px solid #86989B; font-weight: bold; background-color: #AFC1C4; font-size: 0.9em; font-family: sans-serif; } div.warning { border: 1px solid #940000; } div.warning p.admonition-title { background-color: #CF0000; border-bottom-color: #940000; } div.important p.admonition-title { background-color: #86989B; } div.admonition ul, div.admonition ol, div.warning ul, div.warning ol { margin: 0.1em 0.5em 0.5em 3em; padding: 0; } div.versioninfo { margin: 1em 0 0 0; border: 1px solid #ccc; background-color: #DDEAF0; padding: 8px; line-height: 1.3em; font-size: 0.9em; } .viewcode-back { font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif; } div.viewcode-block:target { background-color: #f4debf; border-top: 1px solid #ac9; border-bottom: 1px solid #ac9; } /*======================================================================*/ p.searchtip { visibility: hidden; } .compound-first, .compound-middle { margin-bottom: 0; } .compound-middle, .compound-last { margin-top: 0; } .screenshot { /*padding-left: 16px;*/ clear: right; float: right; margin-left: 1em; } div.figure { padding-top: 1em; padding-bottom: 1em; } div.screenshot p.caption { text-align: center; font-size: 0.9em; } /* #features { clear: both; } */ /* sidebar menu */ a.current { font-weight: bold; } /* for math symbols in the text use Century Schoolbook * that is more like LaTeX Computer Modern font. .math { font-family: "Century Schoolbook", "New Century Schoolbook", times, serif; } */ .smallfont { font-size: 0.9em; } div.subscr, div.subscr span.pre { background-color: #EEEEEE; } div.subscr ul.simple { padding-top: 0; padding-bottom: 0; margin-top: 0; } div.subscr { padding: 0px 12px; border: 1px solid #CCC; border-width: 1px 0; } img.icon { vertical-align: text-bottom; } div.admonition-in-the-gui { border: 1px solid #999999; background-color: #CCCCCC; font-family: "myriad-pro-1","myriad-pro-2",HelveticaNeue,Helvetica,Arial, sans-serif; } div.admonition-in-the-gui div.highlight { background-color: #bbbbbb; } div.admonition-in-the-gui p.admonition-title { color: #f8f8f8; padding-left: 36px; border-bottom: 1px solid #999999; font-weight: bold; background: #AAAAAA url('mouse16.png') no-repeat 10px; } .guilabel, .menuselection { font-family: Helvetica,Arial,sans-serif; } #contents { text-align: center; display: none; } #expand_features a { text-decoration: none; } .quote { font-size: 0.9em; } .quote-author, div.body span.quote-author a { color: #888; } .FlattrButton { text-align: center; float: right; } input, textarea { color: #000; background-color: #fff; } PKVF˜fityk-v1.2.1/_static/minus.pngPNG  IHDR Ÿ pHYs  tIME <8tEXtComment̖ PLTE)))`MZ IDATc a=0V-a ĺIENDB`PK,FרEE#fityk-v1.2.1/_static/searchtools.js/* * searchtools.js_t * ~~~~~~~~~~~~~~~~ * * Sphinx JavaScript utilties for the full-text search. * * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ /** * Porter Stemmer */ var Stemmer = function() { var step2list = { ational: 'ate', tional: 'tion', enci: 'ence', anci: 'ance', izer: 'ize', bli: 'ble', alli: 'al', entli: 'ent', eli: 'e', ousli: 'ous', ization: 'ize', ation: 'ate', ator: 'ate', alism: 'al', iveness: 'ive', fulness: 'ful', ousness: 'ous', aliti: 'al', iviti: 'ive', biliti: 'ble', logi: 'log' }; var step3list = { icate: 'ic', ative: '', alize: 'al', iciti: 'ic', ical: 'ic', ful: '', ness: '' }; var c = "[^aeiou]"; // consonant var v = "[aeiouy]"; // vowel var C = c + "[^aeiouy]*"; // consonant sequence var V = v + "[aeiou]*"; // vowel sequence var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 var s_v = "^(" + C + ")?" + v; // vowel in stem this.stemWord = function (w) { var stem; var suffix; var firstch; var origword = w; if (w.length < 3) return w; var re; var re2; var re3; var re4; firstch = w.substr(0,1); if (firstch == "y") w = firstch.toUpperCase() + w.substr(1); // Step 1a re = /^(.+?)(ss|i)es$/; re2 = /^(.+?)([^s])s$/; if (re.test(w)) w = w.replace(re,"$1$2"); else if (re2.test(w)) w = w.replace(re2,"$1$2"); // Step 1b re = /^(.+?)eed$/; re2 = /^(.+?)(ed|ing)$/; if (re.test(w)) { var fp = re.exec(w); re = new RegExp(mgr0); if (re.test(fp[1])) { re = /.$/; w = w.replace(re,""); } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1]; re2 = new RegExp(s_v); if (re2.test(stem)) { w = stem; re2 = /(at|bl|iz)$/; re3 = new RegExp("([^aeiouylsz])\\1$"); re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); if (re2.test(w)) w = w + "e"; else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); } else if (re4.test(w)) w = w + "e"; } } // Step 1c re = /^(.+?)y$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(s_v); if (re.test(stem)) w = stem + "i"; } // Step 2 re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = new RegExp(mgr0); if (re.test(stem)) w = stem + step2list[suffix]; } // Step 3 re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = new RegExp(mgr0); if (re.test(stem)) w = stem + step3list[suffix]; } // Step 4 re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; re2 = /^(.+?)(s|t)(ion)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(mgr1); if (re.test(stem)) w = stem; } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1] + fp[2]; re2 = new RegExp(mgr1); if (re2.test(stem)) w = stem; } // Step 5 re = /^(.+?)e$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(mgr1); re2 = new RegExp(meq1); re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) w = stem; } re = /ll$/; re2 = new RegExp(mgr1); if (re.test(w) && re2.test(w)) { re = /.$/; w = w.replace(re,""); } // and turn initial Y back to y if (firstch == "y") w = firstch.toLowerCase() + w.substr(1); return w; } } /** * Simple result scoring code. */ var Scorer = { // Implement the following function to further tweak the score for each result // The function takes a result array [filename, title, anchor, descr, score] // and returns the new score. /* score: function(result) { return result[4]; }, */ // query matches the full name of an object objNameMatch: 11, // or matches in the last dotted part of the object name objPartialMatch: 6, // Additive scores depending on the priority of the object objPrio: {0: 15, // used to be importantResults 1: 5, // used to be objectResults 2: -5}, // used to be unimportantResults // Used when the priority is not in the mapping. objPrioDefault: 0, // query found in title title: 15, // query found in terms term: 5 }; /** * Search Module */ var Search = { _index : null, _queued_query : null, _pulse_status : -1, init : function() { var params = $.getQueryParameters(); if (params.q) { var query = params.q[0]; $('input[name="q"]')[0].value = query; this.performSearch(query); } }, loadIndex : function(url) { $.ajax({type: "GET", url: url, data: null, dataType: "script", cache: true, complete: function(jqxhr, textstatus) { if (textstatus != "success") { document.getElementById("searchindexloader").src = url; } }}); }, setIndex : function(index) { var q; this._index = index; if ((q = this._queued_query) !== null) { this._queued_query = null; Search.query(q); } }, hasIndex : function() { return this._index !== null; }, deferQuery : function(query) { this._queued_query = query; }, stopPulse : function() { this._pulse_status = 0; }, startPulse : function() { if (this._pulse_status >= 0) return; function pulse() { var i; Search._pulse_status = (Search._pulse_status + 1) % 4; var dotString = ''; for (i = 0; i < Search._pulse_status; i++) dotString += '.'; Search.dots.text(dotString); if (Search._pulse_status > -1) window.setTimeout(pulse, 500); } pulse(); }, /** * perform a search for something (or wait until index is loaded) */ performSearch : function(query) { // create the required interface elements this.out = $('#search-results'); this.title = $('

' + _('Searching') + '

').appendTo(this.out); this.dots = $('').appendTo(this.title); this.status = $('

').appendTo(this.out); this.output = $('