2.4. Athena project files

The most convenient method for importing data into a DEMETER program is to import directly from an ATHENA project file. Presumably, you have already used ATHENA to process your μ(E) data into an analysis-ready form. When data are imported from a project file, all the attributes of the Data object will be set using the values found in the project file.

2.4.1. Creating Data objects

Importing data from an ATHENA project file is a two-step process. First a Data::Prj object must be created to store information obtained from a lexical analysis of the project file. Methods of the Data::Prj object are then used to generate Data objects. Here is a simple example of extracting the first record from a project file and creating a Data object from that record.

use Demeter;

my $prj = Demeter::Data::Prj -> new(file=>'iron_data.prj');
my $data = $prj -> record(1);
$data -> plot('E');

The $data scalar contains a Data object. Internally, the record method does the following behind the scenes:

$data = Demeter::Data->new();

then sets attributes from values in the project file. It then pushes the associated data arrays into IFEFFIT (or LARCH).

You can import several records at a time by specifying a list of record identifiers:

use Demeter;

my $prj = Demeter::Data::Prj -> new(file=>'iron_data.prj');
my @several = $prj -> records(2, 7, 12, 19);
$_ -> plot('E') foreach @several;

Note that records is just an alias for record. They point at the same method. The two spellings are offered as a nod to English grammar. The method will recognize if it is called in scalar or list context and properly return a single Data object or an array of Data objects.

You can import all records easily using the slurp method.

use Demeter;

my $prj = Demeter::Data::Prj -> new(file=>'iron_data.prj');
my @all = $prj -> slurp;
$_ -> plot('E') foreach @all;

2.4.2. Obtaining other information from project files

You can query an ATHENA project file for its content in several ways. To obtain a listing of contents of the project file, use the list method.

print $prj -> list;
   ## ==prints==>
   #  #     record
   #  # -------------------------------------------
   #    1 : Iron foil
   #    2 : Iron oxide
   #    3 : Iron sulfide

To create a simple table of parameter values, supply a list of attribute names to the list method.

print $prj -> list(qw(bkg_rbkg fft_kmin));
  ## ==prints==>
  #  #     record         bkg_rbkg   fft_kmin
  #  # -------------------------------------------
  #    1 : Iron foil      1.6        2.0
  #    2 : Iron oxide     1.0        2.0
  #    3 : Iron sulfide   1.0        3.0

The list method is used extensively by the lsprj program, which is distributed with DEMETER.

The allnames method will return an array of record labels (the strings in the groups list in ATHENA). For complete details on these methods, see the Demeter::Data::Prj documentation.

DEMETER is copyright © 2009-2016 Bruce Ravel – This document is copyright © 2016 Bruce Ravel

This document is licensed under The Creative Commons Attribution-ShareAlike License.

If DEMETER and this document are useful to you, please consider supporting The Creative Commons.