Getting started: unzip EFFI_version.zip generates a directory EFFI README in EFFI Mossbauer spectra discussed in published/submitted papers are found in the following directories - EFFI/project/Mossbauer_source/mohrsalt/Co57iron/FASrevsource - EFFI/project/Mossbauer_source/calibration/Fe-Fe/anneald - The calibration spectrum used to demonstrate nonlinearity correction: EFFI/project/Mossbauer_source/data/FAS09NEW/CS0514C.DAT Some history: Versions of effi (4.3.0 and higher) The version number concerns the "kernel" of effi, which is distributed as object files included in an archive. The theories have their own version number. The name of the zip file of the help-files containes the date. The help-files may be replaced by newer one in the directory "helpfiles" (effi/helpfiles). The last version of effi which can be translated with the GNU g77 compiler and will not be touched any more is version 3.3.0. Not be touched means that the parameter and data files keep the structure. The fortran files have the extension filename.f. As the gfortran compiler is compatible with g77, this version, of course, may be translated with gfortran usually contained in the linux distributions. The version 4.0.n are identical with 3.3.0 (except some changes accessing helpfiles). The essential difference is the fortran file extension from .f to .f90 and many places where the code has been changed to f90-syntax. This transformation of effi from the fortran77 to the fortran90 and higher (fortran2008) standard very likely produces errors caused by simple typing errors or the more strict rules. The version 4.1.0 seems to be as stable as 3.3.0 tested by the examples to be found in the directory "project". The version 4.2.0 introduces new possibilities to correlate constants. The Mossbauer theories allow for a six parameter fit to the non-linearity of the driving unit. Therefore the .par-files changed the structure. The version 4.7.0 takes into account the fact that the compiler development interdruces incompatibilities. So I found that the archives translated with gfortran version 4.7.2 are not accepted by gfortran version 4.4.5. The archives got a version number of the compiler used. At present two versions (not from its properties concerning effi) are in the distribution. Version 5.0.0 introduces a lot of changes. concerning effi: - a control mechanism for the number of constants and variables comparing the content of .par files and the structure routines str_*.f90 - a grep command {$g} which looks for strings (up to 4 -.and.) in the 1 README-files 2 dvi/pdf-files 3 help-files (this command does not run properly with gfortran version 4.7.2) file structure: The effi/data file moved to the projects (the collection of examples) so that there are the files effi/project/Mossbauer_source/data effi/project/synchrotron_source/data theories: - A Mossbauer calibration spectrum of an absorber with both an alpha-iron foil and hematite powder can be found in the directory /project/demo/calibration/alphaFe-hematite. The small nonlinearity of the drive could not be fitted with 6 parameters available in former versions. Now up to 3*6 parameter and different functions can be choosen. In order to have these parameters as an array the common block "common/avstrf/" has been reorganized such that the variable geo ist at place number 6 instead of 12. Parameter files are not any more compatible with earlier versions. The fortran program replace_position.f90 in the directory /project did this change for all examples in the directory /Mossbauer_source. - the drive routine changed - there is an extra (different) routine drive_strobo for stroboscopy at the synchrotron beam. - relaxation routine between 2 electronic states with arbitrary hyperfine Hamiltonians (effective fields - Deq & H(internal/external)): powder, texture, anisotropic f-factor, etc for all nuclear spins available in nucleus.hdb. - theory for calculating the selfabsorption of a Mossbauer source Version 5.1.0 concerning effi: - the use of the internal variable for the device names has been changed such that the names of variable/parameters defined in the structure routines can be choosen dependent on the calling device. Example for Mossbauer spectrum: intensity parameter of a routine called by the source-device is named intensity and fixed to 1, but called by the absorber-device it is a thickness parameter and named mg/cm2xf. theory: - A simple theory of a single polarized line is added. The polarization is defined by a Poincare vector. Version 5.2.0 concerning effi: - The default session file is automatically changed to the actual one if effi is left with the command {ex}. theory: - helproutines/datafromlit: The routines gv_modified32/64 are "updated". This routine allows to take data (counts of the spectrum) from a pdf/ps file. A further routine cvtomms (convert to mm/s) constructs a spectrum with counts versus velocity. If there is no scale for the counts (or normalized numbers), the baseline is choosen such that the scattering leads to a chi**2 =1. - helproutines/xraytrm: The routine "trm" calculates the transmission of x-ray dependent on energy for arbitrary compounds. Several elements (Ni,Pb,...) and compounds (Mylar, Teflon, ...) are on a list. - helproutines/effect: The routine "effect" calculates the effect of a Mossbauer transmission experiment for any compound (some calibration material like alpha-iron are on a list). The background fraction measured with an empty absorber holder belongs to the input values. Version 5.3.0 Installing two tools:"xdotool, xwininfo" the positions and size of the windows (output window for command {sh}, transformation matrices {tr}, commands {li},commands {he}, {he ab} and fit results {ft ...}) are stored in the session file. For the Mossbauer routine the detector is an extra device: there is the choice for Fe in the dector window with zero velocity with respect to the source and an artificial analyser for the polarization independent of energy (see above). theory: bug in the new relaxation routine The theory anounced in 5.0.0: relaxation routine between 2 electronic states with arbitrary hyperfine Hamiltonians (effective fields - Deq & H(internal/external)): powder, texture, anisotropic f-factor, etc for all nuclear spins available in nucleus.hdb. is not correct. The new version match the special cases calculated by Blume and Tjon Phys Rev 165 (1968)446. - The selfabsorption of the source has been reorganized. - The CEMS/xray Mossbauer spectroscopy got its own routine, such that parameter base becomes "well defined", f_source is omitted, source strength is used as total counts above the baseline,... - helproutines/effect: The thickness of maximum effect is not necessarily the optimal one, because of the decrease of the number of counts by electronic absorption. Therefore the optimal effect weighted by the measurement duration is also calculated. Version 5.3.1 the Mont Carlo simulation of experimental data of a Mossbauer spectrum fitting to a given theory is reorganized and based on mapping of random numbers [0,1) on Gaussian distribution and Poisson time steps distribution in order to simulated dead-time of the counting system. Version 5.3.2 A directory Mossbauer_source/MC_simulation has been added. Simulations of a single line with different count rates, deadtimes, sweep frequencies. (see helpfiles/dvifiles/montecarlo/montecarlo.pdf) Version 5.3.3 -bug in str_stroboscopy.f90 ntrmt(jm+2)='non_linearity matrix=(6,6) include=[n]' the matrix was declared as 4,4 => set up of the theory run into an error message -bug in pg_mossbauer.f90 Some change of the Mossbauer routine (earlier) lead to the effect that the theory curve was only displayed if a data file is read in. This has been corrected such that pure simulations are displayed. -all theory.scr files (*.scr) have been updated (many did not work any more) Version 5.3.4 The gfortran compiler option: -fbacktrace -ffpe-trap=invalid,zero,overflow,underflow,denormal uncovered several underflows and devisions 0/0, which did not change the results. Such code has been put in order. The detector-device, which usually is not used, is now asked for. The control of global definitions has been described in more detail (abouteffi.pdf). Version 5.4.0 - A single polarized line (defined by a Poincare vector) as a source and a energy independent analyser (also defined by a Poincare vector) has been added. Such situation cannot be realized experimentally but may be useful for studying the polarisation behaviour of an finite thick polarized absorber. - openMP ( Open Multi-Processing) https://computing.llnl.gov/tutorials/openMP The compiler option -fopenmp (gfortran -fopenmp ...) includes the Application Program Interface (API) to be used to explicitly direct multi-threaded, shared memory parallelism has been implemented. Do loops over components and directions (powder average) are distributed to the available processors of the computer. Four subroutines got the special code: th_22indexsad() in gpg_refindex_sad.f90, th_hdeqf() in gpg_22nuclear.f90 and the corresponding routines th_22indexREALAXsad() in gpg_refindexRELAX.f90 and th_hdeqfRELAX() in gpg_22nuclearRELAX.f90 The environment variale NPROC (number of processors) is set in the script path. The user does not care. Setting NPROC=1 (export NPROC=1) the time consumptions (cpu_ and wall_time) can be compared. Names of parameters are changed. They are adapted to the experimental situation (absorption/emission-CEMS). I.e. Gaussian distributed intensities normalized to 1 are renamed to "fraction" which are multiplied by a common intensity parameter (counts, mg/cm2xf) (this change is done by effi).Version 5.5.0 Version 5.5.0 Deadtime correction is introduced by two parameters ctauP (paralizable) and ctauN (non-paralizable) dead time. They are only activ for short distances (cosine-smearing is aktivated). The parameter Daperture is shifted to the constants - The corresponding common block changed and may cause problems. The examples in "project" are updated. Version 5.6.0 A command ep (explore parameters) is added. The theory is stepwise changed (ret-key) by increasing/decreasing one or several parameters. The sequence of theory-curves for one or several spectra and its theories (in case of common parameters) are displayed. Version 5.7.0 The calibration spectrum alpha-Fe neasured with a 57Co/alpha-Fe source has given cause to extend the number of texture parameters to a full expansion series Y1m,Y2m (8 parameters, M1/E1-transition) and for axial symmetry Y10,...,Y40 (E2/M2-transition). Some missing decription of constants/variables and topics have been completed/added. Several calibration measurements can be found in the directory project/Mossbauer/calibration. The Monte Carlo code has been extended/improved-corrected (not yet really convinced). Version 5.7.4 The counts of the emission spectrum are seperated into two contributions independent from each other: base modulated by the geometry effect and counts, the sum of counts over all resonance lines. The calculation of the cos-smearing effect has been rewritten. This version allows for a point source and circular appertures. An elliptical apperture as a conic section at some angle and a rectangular apperture (used in case of pressure experiments) is a next step, first for a point source and later on for an extended source. The aim of these features is the possibility to work with small activities (old sources)at short distances without loss of accuracy (not equivalent to identical information!). The gfortran compiler version 7.3.0 (Ubuntu VERSION="18.04.2 LTS) requires the option "-fPIC" for translation of effi. PIC: Position Independent Code. The routines could not be linked without this option for the compiler. One subroutine converting a string containing numbers to an array of real numbers written ca. 30 years ago in c-language does not work any more compiled by gcc version 7.3.0. The error resulted in destroyed plotting on the screen. The routine has been replaced by an old fortran routine encapsulated by a c-routine. The fortran write command: write(cdate,'(a3,a5)')monat(imh),'20'//chyear accepted by earlier compiler gives now an error during execution. The gcc compiler generated a lot of warning messages which could be removed following the stricter coding rules. The effi_archive directory containes libraries translated by gcc/gfortran versions 4.9.2, 6.3.0 and 7.3.0 and 8.3.0. Usually they run with other (newer/older) compiler versions. There will be still found some dirty programming in the routines some older than 30 years. Many fortran routines which handle strings could be replaced by convinient library-routines since Fortran90. However, to follow the rule "never touch a running system" is still advisable. Version 6.0.0 Effi is now completely open source. There are no archive files any more translated by different compiler versions. Everything is translated with the compiler in use. The effi_archive file areffi64_gfortran.a collects the object files of ft_effi-, cc_effi- and cc_suus-directories which represent the kernel of effi. Version 6.0.3 Binomial distribution of any parameter. Cosine smearing in case of an extended circular source and circular aperture diaphragm at very short distances can be included in the calculation of spectra. Version 6.0.5 The cos-smearing code has been completedly changed and is still under development. There is some code not yet used. Single crystal measurements at short distances between source and absorber/detector require a very special calculation of cos-smearing. Documentations are added to the helpfiles (geometry and deadtime effects). The code for deadtime correction has been "improved". The parameter files changed again - further constants and parameters are introduced extending the common blocks. Some variables are grouped and this way the sequence has been changed. Warning: Adding or extending features have side effects, not all are discovered!