From d2a9dfcad9bbfe1fa7fc981a49b266477ee785d5 Mon Sep 17 00:00:00 2001 From: Blaise Thompson Date: Sat, 7 Apr 2018 20:08:50 -0500 Subject: 2018-04-07 20:08 --- acquisition/quad.png | Bin 132157 -> 132067 bytes bibliography.bib | 118 ++++++++++++++++++++++++++++++++++++++++----------- software/chapter.tex | 52 ++++++++++++++++++----- 3 files changed, 135 insertions(+), 35 deletions(-) diff --git a/acquisition/quad.png b/acquisition/quad.png index d400b97..3b1c7f6 100644 Binary files a/acquisition/quad.png and b/acquisition/quad.png differ diff --git a/bibliography.bib b/bibliography.bib index f3d001a..0859f66 100644 --- a/bibliography.bib +++ b/bibliography.bib @@ -1,16 +1,3 @@ -@article{MurdochKiethM2000a, - author = {Keith M. Murdoch and David E. Thompson and Kent A. Meyer and John C. Wright}, - title = {Modeling Window Contributions to Four-Wave Mixing Spectra and Measurements of - Third-Order Optical Susceptibilities}, - journal = {Appl. Spectrosc.}, - volume = 54, - number = 10, - pages = {1495--1505}, - year = 2000, - month = {Oct}, - publisher = {OSA}, -} - @article{AartsmaThijsJ1976a, author = {Aartsma, Thijs J and Wiersma, Douwe A}, title = {{Photon-echo relaxation in molecular mixed crystals}}, @@ -268,6 +255,14 @@ publisher = {Institute of Electrical and Electronics Engineers ({IEEE})}, } +@phdthesis{CarlsonRogerJohn1988a, + author = {Roger John Carlson}, + school = {University of Wisconsin-Madison}, + title = {Quantitative Aspects of High Resolution, Fully Resonant, Four-Wave Mixing + Spectroscopy For the Analysis of Vibronic Mode Coupling in Molecules}, + year = 1988, +} + @article{CarlsonRogerJohn1989a, author = {Roger J. Carlson and John C. Wright}, title = {Absorption and Coherent Interference Effects in Multiply Resonant Four-Wave @@ -339,14 +334,6 @@ month = {jul}, } -@phdthesis{CarlsonRogerJohn1988a, - author = {Roger John Carlson}, - school = {University of Wisconsin-Madison}, - title = {Quantitative Aspects of High Resolution, Fully Resonant, Four-Wave Mixing - Spectroscopy For the Analysis of Vibronic Mode Coupling in Molecules}, - year = 1988, -} - @inproceedings{CarverJeffreyC2007a, author = {Jeffrey C. Carver and Richard P. Kendall and Susan E. Squires and Douglass E. Post}, @@ -784,7 +771,6 @@ year = {1998} month = {aug}, } - @article{GelinMaximF2005a, author = {Gelin, Maxim F. and Egorova, Dassia and Domcke, Wolfgang}, title = {{Efficient method for the calculation of time- and frequency-resolved four-wave @@ -836,6 +822,12 @@ year = {1998} url = {https://github.com/}, } +@misc{GitLab, + note = {Accessed: 2018-04-07}, + title = {The only single product for the complete DevOps lifecycle - GitLab}, + url = {https://about.gitlab.com/}, +} + @article{GriffinGrahamB2013a, author = {Graham B. Griffin and Sandrine Ithurria and Dmitriy S. Dolzhnikov and Alexander Linkin and Dmitri V. Talapin and Gregory S. Engel}, @@ -851,6 +843,7 @@ year = {1998} publisher = {{AIP} Publishing}, } + @article{HammPeter1999a, author = {Hamm, Peter and Lim, Manho and DeGrado, W. F. and Hochstrasser, Robin M}, title = {{The two-dimensional IR nonlinear spectroscopy of a cyclic penta-peptide in @@ -1009,6 +1002,21 @@ year = {1998} pmid = 19745871, } +@article{JoppaLucasN2013a, + author = {Joppa, Lucas N. and McInerny, Greg and Harper, Richard and Salido, Lara and + Takeda, Kenji and O{\textquoteright}Hara, Kenton and Gavaghan, David and Emmott, + Stephen}, + title = {Troubling Trends in Scientific Software Use}, + journal = {Science}, + volume = 340, + number = 6134, + pages = {814--815}, + year = 2013, + doi = {10.1126/science.1231535}, + issn = {0036-8075}, + publisher = {American Association for the Advancement of Science}, +} + @book{KahnemanDaniel2013a, author = {Kahneman, Daniel}, title = {Thinking, Fast and Slow}, @@ -1016,6 +1024,7 @@ year = {1998} publisher = {Farrar, Straus and Giroux}, isbn = {9780374533557}, } + @article{KambhampatiPatanjali2011a, author = {Patanjali Kambhampati}, title = {Unraveling the Structure and Dynamics of Excitons in @@ -1074,7 +1083,6 @@ year = {1998} month = {mar}, publisher = {American Chemical Society ({ACS})}, } - @article{KohlerDanielDavid2017a, author = {Daniel D. Kohler and Blaise J. Thompson and John C. Wright}, title = {Frequency-domain coherent multidimensional spectroscopy when dephasing rivals @@ -1416,6 +1424,19 @@ year = {1998} publisher = {{IEEE} Comput. Soc}, } +@article{MurdochKiethM2000a, + author = {Keith M. Murdoch and David E. Thompson and Kent A. Meyer and John C. Wright}, + title = {Modeling Window Contributions to Four-Wave Mixing Spectra and Measurements of + Third-Order Optical Susceptibilities}, + journal = {Appl. Spectrosc.}, + volume = 54, + number = 10, + pages = {1495--1505}, + year = 2000, + month = {Oct}, + publisher = {OSA}, +} + @article{NieZhaogang2014a, author = {Zhaogang Nie and Run Long and Linfeng Sun and Chung-Che Huang and Jun Zhang and Qihua Xiong and Daniel W. Hewak and Zexiang @@ -1672,6 +1693,17 @@ year = {1998} pmid = 1463575, } +@inproceedings{PrabhuPrakash2011a, + author = {Prakash Prabhu and Yun Zhang and Soumyadeep Ghosh and David I. August and Jialu + Huang and Stephen Beard and Hanjun Kim and Taewook Oh and Thomas B. Jablin and + Nick P. Johnson and Matthew Zoufaly and Arun Raman and Feng Liu and David Walker}, + title = {A survey of the practice of computational science}, + booktitle = {State of the Practice Reports on - {SC} {\textquotesingle}11}, + year = 2011, + doi = {10.1145/2063348.2063374}, + publisher = {{ACM} Press}, +} + @inproceedings{PrabuPrakash2011a, author = {Prakash Prabhu and Yun Zhang and Soumyadeep Ghosh and David I. August and Jialu Huang and Stephen Beard and Hanjun Kim and Taewook Oh and Thomas B. Jablin and @@ -1753,6 +1785,13 @@ year = {1998} journal = {Physical Review A} } +@misc{SI2, + note = {Accessed: 2018-04-07}, + title = {A Vision and Strategy for Software for Science, Engineering and Education: + Cyberinfrastrure Framework for the 21st Century}, + url = {https://www.nsf.gov/pubs/2012/nsf12113/nsf12113.pdf}, +} + @article{SalcedoJR1978a, author = {Salcedo, J R and Siegman, A E and Dlott, D D and Fayer, M D}, title = {{Dynamics of Energy Transport in Molecular Crystals: The Picosecond @@ -1783,6 +1822,20 @@ year = {1998} month = {jun}, } +@article{SandersRebecca2008a, + author = {R. Sanders and D. Kelly}, + title = {Dealing with Risk in Scientific Software Development}, + journal = {IEEE Software}, + volume = 25, + pages = {21-28}, + year = 2008, + doi = {10.1109/MS.2008.84}, + ISSN = {0740-7459}, + keywords = {Professional end-user developer; scientific application software; software + development; software testing; empirical study}, + month = 07, +} + @article{SchweigertIgorV2008a, author = {Schweigert, Igor V. and Mukamel, Shaul}, title = {{Simulating multidimensional optical wave-mixing signals with finite-pulse @@ -2125,6 +2178,21 @@ year = {1998} publisher = {Foundation for Open Access Statistics}, } +@article{WilsonGreg2006a, + ISSN = {1521-9615}, + author = {G. Wilson}, + doi = {10.1109/MCSE.2006.122}, + journal = {Computing in Science & Engineering}, + keywords = {physics education; computation in undergraduate education; continuing education; + software engineering}, + month = 11, + pages = {66-69}, + title = {Software Carpentry: Getting Scientists to Write Better Code by Making Them More + Productive}, + volume = 8, + year = 2006, +} + @article{WilsonGreg2017a, author = {Greg Wilson and Jennifer Bryan and Karen Cranston and Justin Kitzes and Lex Nederbragt and Tracy K. Teal}, @@ -2169,6 +2237,7 @@ year = {1998} month = {oct}, } + @article{WrightJohnCurtis1997a, author = {Wright, John C.}, title = {{New selective nonlinear vibrational spectroscopies}}, @@ -2182,7 +2251,6 @@ year = {1998} month = {jun}, } - @article{WrightJohnCurtis1997b, author = {Wright, John C. and Chen, Peter C. and Hamilton, James P. and Zilian, Arne and Labuda, Mitchell J.}, @@ -2402,13 +2470,13 @@ year = {1998} url = {https://git.chem.wisc.edu/}, } + @misc{h5py, note = {Accessed: 2018-04-04}, title = {h5py: HDF5 for Python}, url = {https://www.h5py.org/}, } - @misc{h5py.Group, note = {Accessed: 2018-03-25}, title = {h5py Groups documentation.}, diff --git a/software/chapter.tex b/software/chapter.tex index 59dd4a9..26636f1 100644 --- a/software/chapter.tex +++ b/software/chapter.tex @@ -46,8 +46,13 @@ comes down to software development: % \item On average, scientists spend approximately 30\% of their work time developing scientific software. \end{ditemize} -PrabhuPrakash2011a---35\% developing, breakdown by type of work... -% TODO: finish this paragraph +\textcite{PrabhuPrakash2011a} had similar results in their 2011 survey, finding that 35\% of +research time is spent in programming and developing software. +Most of that time (57\%) is spent \emph{``finding and fixing errors in their programs''}. % +The amount of software work done for each scientific project is very heterogeneous, with projects +ranging between 5\% and 95\% software development time. % +To me, the averages reported by \textcite{HannayJoErskine2009a} and \textcite{PrabhuPrakash2011a} +seem roughly correct for the average Wright Group member. % Despite the importance of software to science and scientists, most scientists are not familiar with basic software engineering concepts. % @@ -94,9 +99,8 @@ are following today---indeed sometimes it is easier to follow best practices. % In the United States, funding agencies have recognized the crucial role that software plays in science. % The National Science Foundation has a long-running ``Software Infrastructure for Sustained -Innovation'' (SI$^2$) program, which endeavors to take a \emph{``leadership role in providing software as -enabling infrastructure for science and engineering research''} [CITE https://www.nsf.gov/pubs/2012/nsf12113/nsf12113.pdf]. -% https://www.nsf.gov/funding/pgm_summ.jsp?pims_id=503489 +Innovation'' (SI$^2$) program, which endeavors to take a \emph{``leadership role in providing software as enabling infrastructure for science and engineering research''}. \cite{SI2} % +Other funding agencies have similar projects. % \section{Challenges in scientific software development} % ======================================== @@ -221,8 +225,8 @@ This is indispensable when trying to diagnose software problems. % In order to use version control as effectively as possible, try to save the package after every change (feature addition, bugfix, etc). % Typically version control is coupled with uploading to a remote server, for example using git with -GitHub \cite{GitHub}, GitLab [CITE] or git.chem.wisc.edu \cite{git.chem.wisc.edu}, but version -control need not be synonymous with uploading and distribution. % +GitHub \cite{GitHub}, GitLab \cite{GitLab} or git.chem.wisc.edu \cite{git.chem.wisc.edu}, but +version control need not be synonymous with uploading and distribution. % Tools like git have a lot of fantastic features beyond simply saving [CITE], but those are beyond the scope of these ``good enough'' recommendations. % Also consider defining a version for the software package as a whole. % @@ -292,7 +296,7 @@ This section will discuss OOP in the context of a Python implementation. % The basic idea of OOP is defining object types (classes) that are self-contained. % These classes define pieces of associated data (attributes) and associated procedures (functions) within themselves. % -Once the class is defined, instances of that class are created. % +Once the class is defined, instances of that class can be created. % Instances, as the name implies, are just specific ``concrete occurances'' of a given class. % The classic example: \python{Dog} is a class, \python{fido}, \python{spot}, and \python{duke} are three dogs---three instances of the dog class. % @@ -300,7 +304,7 @@ three dogs---three instances of the dog class. % OOP is easier to demonstrate than explain, so let's have some fun with some working Python examples. % First, we will define a class. % -\begin{codefragment}{python} +\begin{codefragment}{python, label=sof:lst:person} class Person(): def __init__(self, name, favorite_food=None, hated_food=None): @@ -344,8 +348,36 @@ The child class, then, can benefit from all of the behaviors enabled by its pare maintaining its own identity where needed. The inheritance pattern makes it very easy to cleanly define expectations and shared structure throughout a large piece of software without repeating functionality. % +As an example, let's create a child of or \python{Person} class, defined in +\autoref{sof:lst:person}: % +\begin{codefragment}{python} +class GradStudent(Person): -% TODO: more exposition on inheritance, perhaps including an example + def react_to(self, food): + if food == self.hated_food: + return 'thanks!' + else: + return super().react_to(food) +\end{codefragment} +Again, let's make an instance and see how it behaves: +\begin{codefragment}{python} +>>> joe = GradStudent(name='Joe', favorite_food='pizza', hated_food='falafel') +>>> joe.react_to('falafel') +'thanks!' +>>> joe.react_to('pizza') +'yum! my favorite' +\end{codefragment} +\python{joe} has the same preferences as \python{mary}, but we were able to \emph{overload} the +behavior of \python{Person} to give \python{joe} a different reaction when faced with his +\python{hated_food} (the joke being that graduate students will eat anything). % +The wonderful thing is that all of the other behaviors---the \python{__init__} method, the reaction +to \python{favorite_food}---were inherited from \python{Person}. % +We could even add new functionality to our \python{Person} class, and that functionality would +immediately be available to \python{GradStudent}. % +In complex programs with trees of inheritance being able to edit one class to change the behavior +of entire sections of the software is a very useful capability. % +You can even have inheritance between different packages, allowing programmers to customize or +extend the behavior of existing tools for their specific needs. % OOP is a deep subject with many patterns and concepts behind it. % There are many places to read further [CITES]. % BJT: KFS can you give me some citations? -- cgit v1.2.3