FEFF and IFEFFIT are amazing tools, but they can be somewhat hard to use. FEFF requires the use of clunky text files with confusing syntax as its input. IFEFFIT has a wordy, finicky syntax. Both benefit by being wrapped up inside of something easier to use. Hopefully, ARTEMIS is that something.
The side bar shows the top-level table of contents of the document along with the contents of the current chapter. The top bar provides additional navigation linking directly to chapters immediately before or after the current chapter or up and down within the current chapter.
Copyright and licensing information is found at the bottom of every page.
This is document version 0.2 for DEMETER version 0.9.21.
I use some typesetting conventions to convey certain kinds of information in this manual.
The names of programs look like this: ARTEMIS, FEFF
The names of files look like this: atoms.inp
Configuration parameters (i.e. preferences) for ARTEMIS and DEMETER look like this: ♦Artemis → plot_after_fit
Verbatim text, such as represent specific input to or output from ARTEMIS or text typed into a computer, looks like this:
This is verbatim text!
Words of caution intended to point out some specific pitfall of the use or ARTEMIS are found in boxes that look like this.
Aspects of this document, or possibly of ARTEMIS itself, which are incomplete are indicated with boxes like this.
DEMETER uses perl. This is, I suppose, an unsexy choice these days. All the cool kids are, after all, using python or ruby. I like perl. I can think in perl. And I can code quickly and fluently in perl. What's more, perl has CPAN, the worlds largest repository of language extensions. CPAN means that I have far fewer wheels to recreate (and probably get wrong). Virtually any language extension I need in pursuit of making DEMETER awesome probably already exists.
DEMETER uses Moose. This is, on the balance, a very good thing, indeed. Moose brings many powerful capabilities to the programming table. When I was about halfway through writing DEMETER, I paused for a bit less than a month to rewrite everything I had thus far created to use Moose. This left me with about 2/3 as many lines of code and a code base that was more robust and more featureful. Neat-o!
For the nerdly, Moose is an implementation of a meta-object protocol. This interesting and powerful tool allows for the semantics of the object system to be modified at either compile or run time. The problem of adding features and functionality to the object system is therefore pushed downstream from the developers of the language to the users of the language. In good CPAN fashion, a healthy and robust ecosystem has evolved around Moose producing a whole host of useful extensions.
Moose offers lots of great features, including an extremely powerful attribute system, a type attribute system, method modifiers, an ability to mix object and aspect orientation, and a wonderfully deep set of automated tests. I am confident that simply by using Moose, my code is better code and, because Moose testing is so deep, I am confident that any bugs in DEMETER are my fault and not the fault of the people whose work I depend on.
For all the wonderfulness of Moose, it does have one big wart that I need to be up-front about. Moose is slow at start-up. Since DEMETER is big and Moose starts slowly, any program using DEMETER will take about 2 extra second to start. For a long-running program like a complicated fitting script or a GUI, an additional couple of seconds at start-up is no big deal. For quick-n-dirty or one-off application, that may a bit annoying. The Moose folk claim to be working on start-up issues. I am keeping my fingers crossed. Until then, I live with the slow start-up, confident that the rest of DEMETER is worth the wait.
All of ARTEMIS' interactions with FEFF, IFEFFIT, and its plotting tools use a templating library. Along with a clean separation between function within the DEMETER code base and syntax of the various tools used by DEMETER, the use of templated interactions provides a clear upgrade path for all parts of ARTEMIS.
For numerically intensive parts of the code, ARTEMIS relies on the Perl Data Language, a natively vector-oriented numerical language.
ARTEMIS makes use a host of other tools from CPAN, the online perl library, including tools for date and time manipulation; heap and tree data structures; tools for formal graph theory; tools for manipulating zip, INI, and yaml files; and many others. These tools from CPAN are extensively tested and highly reliable.
On occasion, it is helpful to know something about how ARTEMIS writes information to disk during its operations.
%APPDATA% is C:\Users\<username>\AppDataRoaming\ on Windows 7.
It is C:\Documents and Settings\<username>\Application Data\ on Windows XP and Vista.
In either case, username is your log-in name.