#!/usr/bin/perl -w
## This perl program is the source for the files Welcome.html,
## course.html, fdl.html, other.html, basics.html, exercises.html,
## hosting.html, notes.html, download.html, and programs.html
## Copyright (c) 2000 Bruce Ravel
## Permission is granted to copy, distribute and/or modify this
## document under the terms of the GNU Free Documentation License,
## Version 1.0 or any later version published by the Free Software
## Foundation; with the Invariant Sections being "EXAFS Analysis
## Using FEFF and FEFFIT, Part 1: Presentation", "EXAFS Analysis
## Using FEFF and FEFFIT, Part 2: Commentary", and all related
## analysis examples, with no Front-Cover Texts, and with no
## Back-Cover Texts. A copy of the license is included in the
## section entitled "GNU Free Documentation License".
##
##
## This file (and all files associated with `EXAFS Analysis Using FEFF
## and FEFFIT') are free documentation; you can redistribute it and/or
## modify it under the terms of the GNU Free Documentation License as
## published by the Free Software Foundation; either version 1, or (at
## your option) any later version.
##
## You should have received a copy of the GNU Free Documentation License
## along with `EXAFS Analysis Using FEFF and FEFFIT'; see the file
## COPYING. If not, write to the Free Software Foundation, 675
## Massachusettes Ave, Cambridge, MA 02139, USA.
##
## Permission is granted to make and distribute verbatim copies of this
## manual provided the copyright notice and this permission notice are
## preserved on all copies.
##
## Permission is granted to copy and distribute modified versions of this
## manual under the conditions for verbatim copying, provided that the
## entire resulting derived work is distributed under the terms of a
## permission notice identical to this one.
##
## Permission is granted to copy and distribute translations of this
## manual into another language, under the above conditions for modified
## versions, except that this permission notice may be stated in a
## translation approved by the author.
use strict;
use CGI;
use CGI::Pretty qw( :html3 );
$CGI::Pretty::INDENT = " ";
push @CGI::Pretty::AS_IS,qw(SMALL);
$ARGV[0] = '';
my $q = new CGI; # create new CGI object
## color scheme
my %colors = (bars => '#cdc0b0', # antiquewhite3
title => '#cd1076', # deeppink3
selected => '#a4d3ee', # lightskyblue3
eauff => '#cd6600', # darkorange3
background => '#2f4f4f', # darkslategrey
textbg => '#ffffff', # white
name => '#2e8b57', # seagreen
);
## date
my $thismonth = (qw(January February March April May June July August September
October November December))[(localtime)[4]];
my $updated =
join("", (localtime)[3], " ", $thismonth, ", ", (localtime)[5]+1900);
## parameters governing tabl creation
my $table_params = {qw(cellpadding 5 cellspacing 0 border 0 width 100%)};
my $table_row_left = {'BGCOLOR', $colors{bars}, qw(WIDTH 15%)};
my $table_row_right = {'BGCOLOR', $colors{bars}, qw(WIDTH 85%)};
my $table_main = {'BGCOLOR', $colors{textbg}, qw(WIDTH 85%)};
## some common words
my $eauff = $q->font({color=>$colors{eauff}},
$q->em('EXAFS Analysis Using FEFF and FEFFIT'));
my $eaufft = 'EXAFS Analysis Using FEFF and FEFFIT';
my $feff = $q->small('FEFF');
my $feffit = $q->small('FEFFIT');
my $ifeffit = $q->small('IFEFFIT');
my $atoms = $q->small('ATOMS');
my $autobk = $q->small('AUTOBK');
my $nbsp = ' ';
## [order, background color for tag, title of page]
## page name and text generation subroutine are determined from key
my %page_info =
(Welcome => [0, 'Top', $colors{bars}, 'Main Page'],
download => [3, 'Download', $colors{bars}, 'Download'],
presentation => [6, 'Presentation', $colors{bars}, 'Presentation'],
notes => [9, 'Notes', $colors{bars}, 'Notes'],
basics => [12, 'Basics', $colors{bars}, 'Basics'],
programs => [15, 'Programs', $colors{bars}, 'Programs'],
flowchart => [17, 'Flowchart', $colors{bars}, 'Program Flowchart'],
##documents => [19, 'Documents', $colors{bars}, 'Documentation'],
exercises => [21, 'Exercises', $colors{bars}, 'Exercises'],
fdl => [24, 'The GNU Free Document License', $colors{bars},
'Free Document License'],
hosting => [27, 'Hosting a Workshop', $colors{bars},
'Hosting a Workshop'],
other => [30, 'Useful Links', $colors{bars}, 'Miscellany'],
acknowledgments => [33, 'Thanks!', $colors{bars}, 'Acknowledgments'],
);
## this puts the pages in the order I want them in the sidebar
my @page_list =
sort {$page_info{$a}->[0] <=> $page_info{$b}->[0]} (keys %page_info);
## a hash of common urls
my %homepages =
(feff => 'http://feff.phys.washington.edu/feff/',
feffit => 'http://cars.uchicago.edu/feffit/',
autobk => 'http://cars.uchicago.edu/autobk/',
ifeffit => 'http://cars.uchicago.edu/ifeffit/',
bruce => 'http://feff.phys.washington.edu/~ravel/',
atoms => 'http://feff.phys.washington.edu/~ravel/software/atoms/',
ease => 'http://feff.phys.washington.edu/~ravel/software/ease/',
matt => 'http://cars.uchicago.edu/~newville/',
acrobat => 'http://www.adobe.com/products/acrobat/readermain.html',
pdfzone => 'http://www.pdfzone.com/products/software/toolinfo_view.html',
);
## where to find PDF readers
my $pdf_list =
$q->ul($q->li([$q->a({href=>$homepages{acrobat}}, "Adobe Acrobat Reader") .
" (for most platforms and without cost)",
$q->a({href=>$homepages{pdfzone}},
"A searchable database of PDF viewers for many platforms"),
]));
## loop through the pages and generate content for each one
foreach my $page (@page_list) {
next unless exists($page_info{$page});
print STDOUT ($page eq 'Welcome') ? "Generating " : " " x 11;
print STDOUT "$page.html$/";
open PAGE, ">$page.html" or die $!;
##print STDOUT "$page_info{$page}->[1]$/";
##open PAGE, ">$page_info{$page}->[1]" or die $!;
print PAGE
$q->start_html(-title=>join(": ", $eaufft, $page_info{$page}->[3]),
-bgcolor=>$colors{background},
-meta=>{'copyright'=>'copyright 2000 Bruce Ravel'}), $/;
print PAGE
$q->comment("
This html page is distributed under the GNU Free Document License (FDL).
Permission is granted to make and distribute verbatim copies of this
web page provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of this
web page under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one and that it is distributed as
transparent copy as defined in the FDL.
Permission is granted to copy and distribute translations
of this web page into another language, under the above conditions for
modified versions, except that this permission notice may be stated
in a translation approved by the author.
"), $/ x 2;
print PAGE $q->comment("
This file was generated by a perl program.
CGI::Pretty was used to make it somewhat human readable.
"), $/ x 3;
my $closure = "&make_${page}_text";
print PAGE $q->table($table_params,
## top row
$q->Tr($q->td($table_row_left, [$nbsp]),
$q->td($table_row_right, [&make_top_bar]),
),
$q->Tr(## side bar
$q->td({%$table_row_left, VALIGN=>'top'},
[&make_side_bar($page)]),
## main text for this page
$q->td($table_main, [eval($closure)]),
##$q->td($table_main, [&{$page_info{$page}->[4]}]),
$q->Tr($q->td($table_row_left, [$nbsp]),
$q->td({%$table_row_right, ALIGN=>'right'},
[&make_bottom_bar]),
),
),
);
print PAGE $q->end_html, $/; # end the HTML
close PAGE;
};
#### ------------------------------------------------------------
## generate the top, side, and bottom bars of the web pages
sub make_top_bar {
my $top_bar_params =
{'BGCOLOR', $colors{bars}, 'width', '20%', 'ALIGN', 'right'};
return
$q->table($table_params,
$q->Tr([$q->td($top_bar_params,
[$q->a({href=>$homepages{feff}},
$q->small('FEFF')),
$q->a({href=>$homepages{feffit}},
$q->small('FEFFIT')),
$q->a({href=>$homepages{ifeffit}},
$q->small('IFEFFIT')),
$q->a({href=>$homepages{atoms}},
$q->small('ATOMS')),
$q->a({href=>$homepages{bruce}},
"Bruce's Home"),
])]));
};
sub make_bottom_bar {
return $q->br . $q->p($q->font({size=>-2},
join(" ", "This page created by",
$q->a({href=>$homepages{bruce}},
"Bruce Ravel"),
"using",
$q->a({href=>'eauff_web.pl'},
"eauff_web.pl"),
"on",
$updated)));
};
sub make_side_bar {
my @list;
foreach my $i (@page_list) {
next unless exists($page_info{$i});
if ($i eq $_[0] ) {
push @list, $q->td({'BGCOLOR', $colors{selected}}, $page_info{$i}->[1]);
} else {
push @list, $q->td({'BGCOLOR', $colors{bars}},
$q->a({href=>"$i.html"}, $page_info{$i}->[1]));
};
};
my $side_bar = $q->table($table_params, $q->Tr([@list]));
return $side_bar;
};
#### ------------------------------------------------------------
## These ugly subs generate the text that goes into each page
sub make_text_header {
my $text = $q->h1({align=>'CENTER'},
$q->font({color=>$colors{title}},
'EXAFS Analysis Using FEFF and FEFFIT')) . $/;
($_[0]) and
$text .= $q->h2({align=>'CENTER'},
$q->font({color=>$colors{title}}, $_[0])) . $/;
return $text;
};
sub make_Welcome_text {
my $text = '';
$text .= &make_text_header();
$text .= $q->p("The is the web page of $eauff, which is a set of
documents accompanying a
workshop by the same title on EXAFS analysis. $eauff
is developed by " . $q->a({href=>$homepages{bruce}}, 'Bruce Ravel') .
". The workshop is typically a three-day affair
consisting of three lectures presented in the morning and
two afternoon computer sessions devoted to working on
example analysis problems.");
$text .= $q->p("$eauff is intended
for students, post-docs, and scientists who are familar
with the experimental techniques and basic theory of EXAFS
but who wish to learn the advanced analytical methods
available using the programs ".
$q->a({href=>$homepages{feff}}, $feff) .
" and " .
$q->a({href=>$homepages{feffit}}, $feffit) .
". As such, the course is geared towards someone already
familiar with the fundamentals of EXAFS analysis,
including such topics as background removal, Fourier
transforms, and Fourier filter analysis using expirical
standards. However, the course can also serve as an
excellent introduction to modern EXAFS analysis for the
motivated beginner.");
$text .= $q->p($q->a({href=>"0README.1ST"}, "Windows and Mac users: please read
this note."));
$text .= $q->p("When read on the Web (rather than directly from the CD)
These pages contain links to all of the materials
distributed on the CD-ROM given to particiants in the
course with the exception of the source codes for the
programs. Since each program has its own web page, you
will be directed to the appropriate locations for source
codes.");
$text .= $q->p("Included on these pages are the following:" .
$q->ul({-type=>'disc'},
$q->li( [
join("",
$q->a({href=>"presentation.html"},
$page_info{presentation}->[1]),
": the latex source and PDF output files
for the transparancies used in the
presentation of the workshop.", $q->p),
join("",
$q->a({href=>"notes.html"},
$page_info{notes}->[1]),
": the latex source and
PDF output files for the commentary on the workshop.
This is a 100 page (and growing!) book covering all
aspects of data analysis using $feff and
$feffit and is inteded to be a practical
guide for the EXAFS experimenter", $q->p),
join("",
$q->a({href=>"basics.html"},
$page_info{basics}->[1]),
": the latex source and
PDF output files for two introductory lectures on
EXAFS experiment and theory", $q->p),
join("",
$q->a({href=>"exercises.html"},
$page_info{exercises}->[1]),
": analysis
exercises for the workshop including data and input
files.", $q->p),
join("",
$q->a({href=>"programs.html"},
$page_info{programs}->[1]),
": information on
obtaining source code, documentation, and executables
for some platforms for $feff, $atoms, $autobk,
$feffit, and $ifeffit. Also links to a variety of
other useful software tidbits.", $q->p),
])) . "and other stuff, as well." );
return $text;
};
sub make_presentation_text {
my $text = '';
$text .= &make_text_header('Presentation');
$text .= $q->p("The lectures presented in the $eauff workshop are
made using a PDF file. This PDF files is generated from LaTeX source
and PNG images generated using a variety of methods. The PDF file is
suitable for use with a computer and a data projector, for viewing
individually at one's computer, or for printing onto paper or onto
transparency sheets.") . $/;
$text .= $q->p($q->a({href=>'course.pdf'}, "Here is the PDF file.")) . $/;
$text .= $q->p($q->a({href=>'latex/'}, "Here is the directory listing
for the source tree for this document.")) . $/;
$text .= &make_pdf_text;
return $text;
};
sub make_pdf_text {
my $text = '';
$text .= $q->hr . $/;
$text .= $q->h3({align=>'LEFT'},
$q->font({color=>$colors{title}},
'What is PDF?')). $/;
$text .= $q->p("PDF is an acronym for Portable Document Format, a
documentation standard published by Adobe. PDF requires a special
viewer to read. Fortunately viewers are available without cost for a
wide variety of platforms. Here is a list of links to PDF viewers.
Please note that none of these viewers are written by or endorsed by
Bruce Ravel. This list is merely here for your convenience.") . $/;
$text .= $pdf_list;
$text .= $q->h3({align=>'LEFT'},
$q->font({color=>$colors{title}},
'Redistributing this document')). $/;
$text .= $q->p("Please note that this document is released under the
Free Document License. This specifically allows you to modify and
redistribute this document, albeit under certain conditions. One of
those conditions is that you may only distribute \"transparent\"
copies of the document. This means that you may not use a PDF editor
to edit the PDF document directly and then redistribute the PDF
document. PDF is not a transparent format by the terms of the FDL.
To modify and redistribute this document, you must edit the LaTeX
source code or in some other way use a transparent format as defined
by the FDL. Of course, you may modify the PDF file in any manner for
your personal use, but you may not give away that modified PDF file.")
. $/;
return $text;
};
sub make_notes_text {
my $text = '';
$text .= &make_text_header('Commentary on the presentation');
$text .= $q->p("On this page you will find the commentary on the $eauff
workshop. In the commentary, I discuss the topics covered in the lectures
in significant detail. Thus this document may be viewed as a sort of user's
quide to $feff and $feffit. The commentary is contained in an illustrated,
100+ page PDF file and is the most important original document distributed
with $eauff.") . $/;
$text .= $q->p($q->a({href=>'notes.pdf'}, "Here is the PDF file.")) . $/;
$text .= $q->p($q->a({href=>'latex/'}, "Here is the directory listing for the source tree for this document.") . " Most of the source for this document
is found in the " .
$q->a({href=>'latex/notes/'}, $q->kbd("`notes/'")) .
"directory.") . $/;
$text .= &make_pdf_text;
return $text;
};
sub make_basics_text {
my $text = '';
$text .= &make_text_header('Basic concepts of EXAFS');
$text .= $q->p("This page contains links to a couple of PDF file containing the
transparencies for introductory lectures on EXAFS experiments and
multiple scattering theory. One, " .
$q->em("Introduction to EXAFS Analysis Using Theoretical Standards") .
", is an overview of the use of theoretical standards intended
for an audience already familiar with the basics of EXAFS. It discusses basic
concepts of multiple scattering theory and offers several interesting analysis
examples using MS theory. The second, " .
$q->em("Application of X-Ray Absorption Spectroscopy") .
", is a broad overview of absorption spectroscopy intended for an
audience unfamiliar with XAFS. It was orginally given at the Naval
Research Laboratory, so includes an introduction to the NRL's facility
at NSLS.");
$text .= $q->p("These PDF files are generated from LaTeX source
and PNG images generated using a variety of methods. The PDF files are
suitable for use with a computer and a data projector, for viewing
individually at one's computer, or for printing onto paper or onto
transparency sheets.") . $/;
$text .= $q->p($q->a({href=>'basics/IEAUTS/ieauts.pdf'},
"Here is the PDF file for " .
$q->em("Introduction to EXAFS Analysis Using Theoretical Standards"))) . $/;
$text .= $q->p($q->a({href=>'basics/IEAUTS/'},
"Here is the directory listing for the source tree for " .
$q->em("Introduction to EXAFS Analysis Using Theoretical Standards"))) . $/;
$text .= $q->p($q->a({href=>'basics/AXAS/axas.pdf'},
"Here is the PDF file for " .
$q->em("Application of X-Ray Absorption Spectroscopy"))) . $/;
$text .= $q->p($q->a({href=>'basics/AXAS/'},
"Here is the directory listing for the source tree for " .
$q->em("Application of X-Ray Absorption Spectroscopy"))) . $/;
$text .= $q->p;
$text .= &make_pdf_text;
return $text;
};
sub make_exercises_text {
my $text = '';
my $datadir = $q->kbd("`data/'");
my $fitsdir = $q->kbd("`fits/'");
my $feffdir = $q->kbd("`feff/'");
$text .= &make_text_header('Analysis exercises');
$text .= $q->p("In the $eauff workshop, several analysis problems
are given as example illustrating various aspects of $feff and $feffit.
Here you will find links to directories containing those analysis examples.
Included in each example is data and enough input files for $atoms, $feff,
$autobk, and $feffit to get started working through the examples.") . $/;
$text .= $q->p("These examples are not a hand-held walk through the
programs. The input file may contain typos or incomplete physical
models. However each set of files is reasonably complete and should be
made to run to some kind of conclusion without too much work. It is
intended, though, that you work through the examples carefully and
completely, making sure that you understand the issues presented by
each one.") . $/;
$text .= $q->p("Most of these analysis examples are discussed in the
workshop presentation and in the commentary document. However, over
time I hope to build up a large collection of interesting examples
beyond what is discussed in the course.") . $/;
$text .= $q->p("Each subdirectory has feffit input files and
three subdirectories. The $datadir subdirectory contains data files --
always mu(E) and sometimes chi(k). The $feffdir directory contains
$atoms input files if the matrial is crystalline and $feff input files
if not. The $fitsdir subdirectory is usually empty, but the $feffit
input files are set up to write their output to those spaces.") . $/;
$text .=
$q->dl(
## copper
$q->dt($q->a({href=>'materials/Cu/'}, "Copper Metal")),
$q->dd("This is the copper metal example. It serves as the
introduction to $feff, $autobk, anbd $feffit. It is a simple system
which allows you to explore many of the features of these programs
without getting bogged down in the details of physical modelling. In
particular, you should use this example to become familiar with the
various output files generated by $feff and $feffit, you should
examine the data, fit, and individual path contributions in each of k,
R, and back-transformed k space. You should also learn how to do
additional background refinement with $feffit.".$q->p),
## GaN
$q->dt($q->a({href=>'materials/GaN/'}, "GaN")),
$q->dd("This is the hexagonal Gallium Nitride example. It
demonstrates the use of polarization dependent calculations in $feff
and $feffit as well as introduces you to physical model building using
math expressions in $feffit.".$q->p),
## EuTiO3
$q->dt($q->a({href=>'materials/EuTiO3/'}, "EuTiO3")),
$q->dd("This is the Europium Titanate example. This example
introduces the concepts of multiple data set fitting, includes files,
phase corrections using E0 parameters, and local variables. There is
data at both the Ti K edge and the Eu L3 edge as well as data at
several temperatures, thus you can do multiple data set fits with both
edges, with many temperatures, or both.".$q->p),
## PbTiO3
$q->dt($q->a({href=>'materials/PbTiO3/'}, "PbTiO3")),
$q->dd("This is the Lead Titanate example. This introduces
complex model building using math expressions by computing bond
lengths from crystallographic parameters which are used as the
variables in the fit. This material also introduces the measurement of
bond angles using multiple scattering paths. This is a difficult and
complex analysis problem.".$q->p),
## ABC
$q->dt($q->a({href=>'materials/AgBrCl/'}, "AgBrCl")),
$q->dd("This is the Silver Bromide Chloride example. This
introduces a method for handling doped meterials and other materials
with heterogeneous coordination shells.".$q->p),
## Ni[(CN)4]2-
$q->dt($q->a({href=>'materials/NiC4N4/'}, "Ni[(CN)4]2-")),
$q->dd("This is the Nickel Thyanocynide example. This is an example
of a small molecule in solution and so is very different from the
crystalline examples above. You will find that the analysis
techniques developped for the crystalline materials are transferable
to this system. This material has strong multiple scattering at a very
short distance and is a good example of a matrial for which the MS paths
can be used to measure bond angle.".$q->p),
) . $/;
return $text;
};
sub make_programs_text {
my $text = '';
my $progdir = $q->a({href=>'programs/'}, $q->kbd("`programs/'"));
$text .= &make_text_header('Analysis software');
$text .= $q->p("This page provides pointers to the homepages of the
programs $feff, $feffit, $autobk, and $atoms. None of source code,
executables, or documentation for these programs are kept one this
page. You should always seek out the latest at their respective
homepages. (Although if you are reading this page from a physical copy
of the CD-ROM, you will find source code under the $progdir
directory.)") . $/;
$text .= $q->p("$feff, $feffit, and $autobk are all available as
stand-alone Fortran source files. These must be compiled using a
Fortran compiler. As these programs are written very close to the
ANSI standard for Fortran 77, it should be an easy chore to compile
them. $ifeffit also requires a Fortran compiler, but comes with
complete installation instructions. $atoms is written in perl and
it, too, comes with complete installation instructions.");
$text .= $q->ul({-type=>'disc'},
$q->li([$q->a({href=>$homepages{feff}},
"$feff ( $homepages{feff} )".$q->p),
$q->a({href=>$homepages{feffit}},
"$feffit ( $homepages{feffit} )".$q->p),
$q->a({href=>$homepages{autobk}},
"$autobk ( $homepages{autobk} )".$q->p),
$q->a({href=>$homepages{atoms}},
"$atoms ( $homepages{atoms} )".$q->p),
$q->a({href=>$homepages{ifeffit}},
"$ifeffit ( $homepages{ifeffit} )".$q->p),
]));
$text .= $q->hr() . $q->p;
$text .= $q->p("The $eauff CD-ROM comes with a variety of other
little tools which in some way add value to main programs listed
above. None of these additional tools are necessary for using the
main programs, but they may provide functionality which you will find
useful and helpful.") . $/;
$text .= $q->dl($q->dt($q->a({href=>$homepages{ease}}, "EASE")),
$q->dd("EASE is a set of modules for the Emacs text
editor which provide a full featured user interface to the main
programs. Along with a host of useful features such as sytax
colorization, indentation, keyword completion, EASE provides a large
number of editing shortcuts to facilitate the creation of input files.
EASE also provides an execution environment which allows you to run
the codes on arbitrarily named input files and a plotting environment
using the Gnuplot plotting program."),
$q->dt($q->a({href=>'programs/bin/'}, "Various scripts")),
$q->dd("In this directory you will find a variety of
useful scripts and programs written in perl, awk, and other languages.
These programs are not necessarily polished and professional, but you may
find some of them to be quite nifty."),
$q->dt($q->a({href=>'programs/perl/'}, "Perl modules")),
$q->dd("In this directory you will find a variety of
Perl modules written for use with the main programs. These do not do
anything by themselves, but if you are a Perl programmer, you may
find these very useful."),
) . $/;
return $text;
};
sub make_fdl_text {
my $text = '';
$text .= &make_text_header('The GNU Free Document License');
$text .= $q->p("$eauff is a free document. I
mean this in the same sense as free software. Not only is this
document and the companion materials free of cost (you can download it
off the web at your convenience) but they are free in the sense of
free speech. This document and the majority of the companion files
are distributed under the terms of the GNU Free Documentation License
Any files not distributed under the FDL are distributed under another
license which also serves to protect certain freedoms of you, the
reader.") . $/;
$text .= $q->p("My use of the FDL is advantageous both to you
the reader and to me the author. That this document is under the FDL
means that you may make any number copies of this document for your
own use. You may give copies of this document to other people in
electronic or any other form. You may make translations of this
material and distribute the translations. You may modify these
materials in any way that addresses a particular need you may have.
You may distribute your modified version of this document so long as
you make clear what parts were written by you and what parts were
written by me. You may use any part of this document or its companion
materials in your own work. Of course, you must give proper
acknowledgment to me if you use any part of this document in a
professional context. Failure to do so is called plagiarism and is
generally a \"bad thing.\"") . $/;
$text .= $q->p("In return for my using the FDL and so granting
you all the rights discussed above, I ask that you contribute to this
document. This contribution may be as small as telling me what parts
were helpful to you and what parts were not helpful. Or this
contribution may be a large as writing a new chapter, providing a new
example analysis problem, or providing editorial service to the
existing document. Of course, you are under no obligation to do any
of those things. If you do, though, your contributions will be fully
credited to you. This document has been created in the spirit of
service to the EXAFS community. The reason for using the FDL is the
same. If you contribute to the development of this document, then you
too are doing a service to the EXAFS community.") . $/;
$text .= $q->p($q->a({href=>'FDL'},
"The text of the GNU Free Document License")) . $/;
$text .= $q->p($q->a({href=>'http://www.gnu.org/copyleft/fdl.html'},
"Information from the Free Software Foundation about the
GNU Free Document License")) . $/;
return $text;
};
sub make_download_text {
my $text = '';
$text .= &make_text_header('Downloads');
$text .= $q->p("On this page you will find links to the PDF files
that come with $eauff. You will also find the entire contents of the
$eauff CD-ROM in a variety of compressed archive formats (however, if
you are reading this web page from a physical copy of the CD-ROM,
those links will not point anywhere). Be warned, though, that the
CD-ROM images are " . $q->strong('huge') . " -- tens of megabytes in
size. Also be aware that that source code and executables for the
programs $feff, $feffit, $autobk, and $atoms are not included in these
CD-ROM images. You should obtain those from their homepages, which
are linked on the Programs page.") . $/;
$text .= $q->p("Images of the CD-ROM:" .
$q->ul({-type=>'discs'},
[$q->a({href=>'../course.tar.gz'},
"CD-ROM, tarred and gzipped") .
" (about 9 Mb)" . $q->p,
$q->a({href=>'../course.tar.bz2'},
"CD-ROM, tarred and compressed with bzip2") .
" (about 9 Mb)" . $q->p,
$q->a({href=>'../course.zip'},
"CD-ROM, zip file") .
" (about 13 Mb)" . $q->p,
$q->a({href=>'../course.iso'},
"CD-ROM, ISO image for immediate copy onto a CD") .
" (about 19 Mb)" . $q->p,
]));
$text .= $q->p("PDF files:" .
$q->ul({-type=>'discs'},
[$q->a({href=>'course.pdf'},
"Workshop transparencies") .
" (about 1.2 Mb)" . $q->p,
$q->a({href=>'notes.pdf'},
"Workshop commentary") .
" (about 1 Mb)" . $q->p,
$q->a({href=>'ieauts.pdf'},
$q->em("Introduction to EXAFS Analysis Using Theoretical Standards")) .
" (about 500 kb)" . $q->p,
$q->a({href=>'axas.pdf'},
$q->em("Application of X-Ray Absorption Spectroscopy")) .
" (about 1.6 Mb)" . $q->p,
]));
return $text;
};
sub make_hosting_text {
my $text = '';
$text .= &make_text_header('Hosting a workshop at your institution');
$text .= $q->p("You may be interested in having a presentation of the
$eauff workshop at your institution. If so, you should contact " .
$q->a({href=>$homepages{bruce}}, 'Bruce Ravel') .
" directly.") . $/;
$text .= $q->p("The $eauff workshop is typically held over three days.
Mornings are reserved for lectures, which typically require about 90
minutes. Afternoons are used for
computer sessions so that the participants may learn the use of the
programs with real analysis examples.") . $/;
$text .= $q->ul({-type=>'disc'},
$q->li([
$q->p("The morning lectures should be held in a lecture
room with adequate seating for the participants.
Access to a data projector which I can use with a laptop
computer is an nonnegotiable requirement."),
$q->p("The afternoon sessions should be held in a computer lab.
My preference is for people to work in pairs, thus one computer is needed for
every two participants. These computers must be equipped with a data
plotting utility such as Microcal Origin or Gnuplot. A spreadsheet such
as Excel is unacceptable to me. Network connections and a printer are
unnecessary needed, however each computer should be equipped with a CD reader
or a Zip100 drive so that I may install the data analysis software.")])) . $/;
$text .= $q->p("I am fairly flexible as to the nature of the
computers provided for use in the afternoon sessions. My preference
is for a group of Linux or other unix workstations, although I am
willing and able to provide course materials for Windows 98 or Windows
NT. While I am willing in principle to use Macintosh or other kinds
of computers for the course, doing so would require extensive work by
the host as I do not have access to these computers for compiling
programs and testing the analysis examples.") . $/;
$text .= $q->p("The language of the morning lectures is English.
However, I am conversant in French and Spanish and the afternoon
computer sessions can be conducted in either language.") . $/;
$text .= $q->p("Your institution is expected to pay expenses
associated with travel, lodging, and meals for the duration of the
course. Payment of an honorarium or other form of remuneration is
negotiable and should be discussed directly with Bruce.") . $/;
$text .= $q->p("Reproduction
of the CD-ROM containing all course materials is the responsibility
of the host, although a master copy will be provided by Bruce.") . $/;
return $text;
};
sub make_other_text {
my $text = '';
$text .= &make_text_header('Other information');
$text .= $q->p("This is a page of links to sources of information and
programs which may be useful to someone interested in $eauff. These
links are here for your convenience. Bruce Ravel does not endorse or
promise to support anything listed on this page.") . $/;
## CD cover
$text .= $q->p("Want a fairly nice cover for your the copy of
$eauff that you burned onto a CD-ROM? " .
$q->a({href=>'cover/cover.ps'}, "Follow this link.") .
" I recommend copying this onto colored card stock.") . $/;
## perl
$text .= $q->h3("Perl links") . $/;
$text .=
$q->ul($q->li([$q->a({href=>'http://www.perl.com'},
'Perl.com, the source of all things perl.'),
$q->a({href=>'http://www.activestate.com/'},
'ActiveState, perl binary distributions for Windows, Linux, and Solaris.'),
$q->a({href=>'http://www.ptf.com/MacPerl/'},
'MacPerl, perl for the Macintosh')])) . $/;
## emacs
$text .= $q->h3("Emacs links") . $/;
$text .=
$q->ul($q->li([$q->a({href=>$homepages{ease}},
"EASE: An Emacs environment for $feff and $feffit"),
$q->a({href=>'http://www.gnu.org/software/emacs/emacs.html'},
"Emacs: the extensible, customizable, self-documenting real-time display editor."),
$q->a({href=>'http://www.xemacs.org/'},
"XEmacs: the other extensible, customizable, self-documenting real-time display editor."),
$q->a({href=>'http://www.cs.washington.edu/homes/voelker/ntemacs.html'},
"NTEmacs, Emacs for Windows."),
$q->a({href=>'http://www.csis.hku.kr/~choi/emacs/'},
"Emacs for the Macintosh"),
$q->a({href=>'http://cygwin.cygnus.com'},
'Cygwin, unix tools for Windows') . " (needed to use EASE with NTEmacs)",
])) . $/;
## pdf
$text .= $q->h3("PDF viewers") . $/;
$text .= $pdf_list . $/;
return $text;
};
sub make_acknowledgments_text {
my $nicn = "[Ni(CN)4]2-";
my $p = $q->p;
my $text = '';
$text .= &make_text_header('Acknowledgments');
$text .= $q->p("A lot of people have contributed in some manner to
the development of $eauff and the supporting materials. I
would like to thank the following people: ") . $/;
$text .= $q->ul($q->li([$q->font({color=>$colors{name}}, "Matt Newville") .
", for writing $feffit and for
other contributions too numerous to count$p",
$q->font({color=>$colors{name}}, "Sof\ía D\íaz-Moreno") .
", haberme ayudando a hacer m\ás
accesible el an\álisis de \ángulos y demonstrando el ejemplo de mol\éculos y " . $q->font({color=>$colors{name}}, "Adela Muñoz-Paez") .
" qui me dio los datos de $nicn$p",
$q->font({color=>$colors{name}}, "Shelly Kelly") .
", for contributing RbCl data and
input files as an example of analyzing mixed phase materials$p",
$q->font({color=>$colors{name}}, "Daniel Haskel") .
", for demonstrating another way
of measuring bond angles and a fine example of analyzing doped materials$p",
$q->font({color=>$colors{name}}, "Joe Woicik") .
", for giving me GaN data$p",
$q->font({color=>$colors{name}},
"Michael Borowski , Daniel Bowron,
Stuart Ansell, and Eva Fahje") .
" for graciously hosting and helping me the
first time I gave this course et \à " .
$q->font({color=>$colors{name}}, "Claudine Brun") .
" qui m'a aid\é beaucoup le
pr\émi\èr fois$p" ,
$q->font({color=>$colors{name}},
"John Rehr, Jose Mustre de Leon,
Steve Zabinsky, and Alex Ankudinov") . ", for writing $feff$p",
$q->font({color=>$colors{name}}, "Ed Stern") .
", for teaching me so much so well"])) . $/;
$text .= $q->p("and to the enormous number of people who have expressed an
interest in this course. When I started, I had no idea of the extent
of the demand and desire for a course of this sort.") . $/;
return $text;
};
sub make_flowchart_text {
my $text = '';
$text .= &make_text_header('Flowchart');
$text .= $q->p("Here is a flow diagram describing the use of the $feff,
$feffit and other programs. It shows the flow of data, input files and
output files through an analysis.") . $/;
$text .= $q->p($q->a({href=>'handouts/flowchart/flow.png'},
$q->img({src=>'handouts/flowchart/flow_s.png',
align=>'center',
border=>0,
alt=>'[flow diagram of a FEFF based analysis]',})));
$text .= $q->p("Notes:" .
$q->ol($q->li(["The input file for $feff for a crystalline
material is typically made using $atoms. For a non-crystalline
material, the input file must be made in some other manner.",
"The blue dot-dash line indicates
functionality that is being developed for $atoms, but which does not
yet exist."])));
return $text;
};
## sub make__text {
## my $text = '';
## $text .= &make_text_header('');
## $text .= $q->p("This page lacks content") . $/;
## return $text;
## };