#!/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; ## };