diff options
| author | Pedram Ashofteh Ardakani <pedramardakani@gmail.com> | 2020-04-29 17:35:32 +0430 | 
|---|---|---|
| committer | Pedram Ashofteh Ardakani <pedramardakani@gmail.com> | 2020-04-29 17:35:32 +0430 | 
| commit | d129dd139f97c6dab197e270a69c49da4f6fcbb8 (patch) | |
| tree | 48354f785c9ff9471c3f8f7863c16435864a3e25 /tutorial.html | |
| parent | 2c9e797a73fc5f6e2cfa5562ce0772497a6650a5 (diff) | |
Prepare tutorial file, and add link to index
The tutorial still needs clearing up.
Diffstat (limited to 'tutorial.html')
| -rw-r--r-- | tutorial.html | 1438 | 
1 files changed, 697 insertions, 741 deletions
diff --git a/tutorial.html b/tutorial.html index 0060235..8ffb173 100644 --- a/tutorial.html +++ b/tutorial.html @@ -1,792 +1,748 @@ -<h1>Maneage tutorial</h1> - -<p>Copyright (C) 2020 Raul Infante-Sainz <a href="mailto:infantesainz@gmail.com">infantesainz@gmail.com</a>\ -Copyright (C) 2020 Mohammad Akhlaghi <a href="mailto:mohammad@akhlaghi.org">mohammad@akhlaghi.org</a>\ -See the end of the file for license conditions.</p> - -<p>This document is a tutorial in which it is described how <code>Maneage</code> -(management + lineage) works in practice. It is highly recommended to read -the <code>README-hacking.md</code> in order to have a clear idea of what is this -project about. Actually, in this tutorial it is assumed you have the project -already set up and working properly. In order to do it, please, read and -follow all the steps described in the sections <code>Customization checklist</code> up -to the section <code>Title, short description and author</code> (including the last -one).</p> - -<p>With the current tutorial, the reader will be able to have a fully -reproducible paper describing a small research example carried out step by -step. The research example is very simple: it will consist in analyse a -dataset with two columns (time and population). The analysis will be just to -make a linear fitting of the data, and then, write the results in a small -paragraph into the final paper.</p> - -<p>In the following, the tutorial assume you have three different directories. -You had to set up them in the configure step:</p> - -<ul> -<li><p><code>input-directory</code>: Necessary input data for the project is in this -directory.</p></li> -<li><p><code>project-directory</code>: This directory contains the project itself (source -codes), it is under <code>Git</code> control.</p></li> -<li><p><code>build-directory</code>: Output directory of the project, it is where all the -necessary software and the results of the project are saved.</p></li> -</ul> - -<p><strong><em>IMPORTANT NOTE</em></strong>: the tutorial assume you are always in -<code>project-directory</code> when considering command lines.</p> - -<p><strong>In short:</strong> this hands on tutorial will guide you through a simple -research example in order to show the workflow in <code>Maneage</code>. The tutorial -describes by step how to download a small file containg data, analyse the -data (by making a linear fitting), and finally write a small paragraph with -the fitting parameters into the final paper. All of this will be done in the -same Makefile.</p> - -<h2>Installing available software: Matplotlib</h2> - -<p>If all steps above have been done successfully, you are ready to start -including your own analysis scripts. But, before that, let's install -<code>Matplotlib</code> Python package, which will be used later in the analysis of the -data when obtaining the linear fit figure. This Python package will be used -as an example on how to install programs that are already available in -<code>Maneage</code>. Just open the Makefile -<code>reproduce/software/config/installation/TARGETS.mk</code> and add to the -<code>top-level-python</code> line, the word <code>matplotlib</code>.</p> - -<p><code>shell - # Python libraries/modules. - top-level-python    = astropy matplotlib -</code></p> - -<p>After that, run the configure step again with the option <code>-e</code> to continue -using the same configuration options given before (input and build -directories). Also, run the prepare and make steps:</p> - -<p>```shell -$ ./project configure -e -$ ./project prepare -$ ./project make</p> - -<h1>Open 'paper.pdf' and see if everything is fine. Note that now, <code>Matplotlib</code></h1> - -<p>is appearing in the software appendix at the end of the document. -```</p> - -<p>Once you have verified that <code>Matplotlib</code> has been properly installed and it -appears into the final <code>paper.pdf</code>, you are ready to make the first commit -of the project. With the next commands, you will see which files have been -modified, what are the modifications, prepare them to be commited, and make -the commit. In the commit process, <code>Git</code> will open the text editor for -writting the commit message. Take into account that all changes commited -will be preserved in the history of your project. So, it is a good practice -to take some time to describe properly what have been done/changed/added. -Finally, as this is the very first commit of the project, tag this as the -zero-th version.</p> - -<p><code>shell -$ git status         # See which files have been changed. -$ git diff           # See the lines you have modified. -$ git add -u         # Put all tracked changes in staging area. -$ git status         # Make sure everything is fine. -$ git commit         # Your first commit, add a nice description. -$ git tag -a v0.0    # Tag this as the zero-th version of your project. -</code></p> - -<p>Now, have a look at the <code>Git</code> history of the project. Note that the local -master branch is one commit above than the remote origin/master branch. -After that, push your first commit and its tag to your remote repository -with the next commands. Since you had setup your <code>master</code> branch to follow -<code>origin/master</code>, you can just use <code>git push</code>.</p> - -<p><code>shell -$ git log --oneline --decorate --all --graph   # Have a look at the Git history. -$ git push                                     # Push the commit to the remote/origin. -$ git push --tags                              # Push all tags to the remote/origin. -</code></p> - -<p>Now it is time to start including your own scripts to download and make the -analysis of the data. It is important to bear in mind that the goal of this -tutorial is to give a general view of the workflow in <code>Maneage</code>. In this -sense, only a few basic concepts about <code>Make</code> and how it is used into this -project will be given. <code>Maneage</code> is much more powerfull and much more things -than the ones showed in this tutorial can be done. So, read carefully all -the documentation and comments already available into each file, be creative -and experiment making your own research.</p> - -<p>In the following, the tutorial will be focused in download the data, analyse -the data, and finally write the results into the final paper. As a -consequence, there are a lot of things already done that are not necessary. -For example, all the text of the final paper already written into the -<code>paper.tex</code> file, some Makefiles to download images from the Hubble Space -Telescope and analyse them, etc. In your own research, all of this work -would be removed. However, in this tutorial they are not removed because we -will only show how to do a simple analysis and include a small paragraph -with the result of the linear fitting.</p> - -<p><strong>In short:</strong> in this section you have learnt how to install available -software in <code>Maneage</code>. In this particular case, you installed <code>Matplotlib</code></p> - -<h2>Including Python script to make the analysis</h2> - -<p>You are going to use a small Python script to make the analysis of the data. -This Python script will be invoked from a Makefile that will be set up -later. For now, we are going to just create the Python script and put it in -an appropiate location. All analysis scripts are kept into a subfolder with -the name of the same file type in <code>reproduce/analysis</code>. For example, the -Makefiles are saved into the <code>make</code> directory, and bash scripts are saved -into the <code>bash</code> directory. Since there is any <code>python</code> directory, create it -with the following command.</p> - -<p><code>shell -$ mkdir reproduce/analysis/python -</code></p> - -<p>After that, you need the Python script itself. The code is very simple: it -will take an input file containing two columns (year and population), the -name of the output file in which the parameters of the linear fit will be -saved, and the name of the figure showing the original data and the fitted -curve. Paste the next Python script into a new file named <code>linear-fit.py</code> -into the directory generated in the above step -(<code>reproduce/analysis/python</code>).</p> - -<p>```</p> - -<h1>Make a linear fit of an input data set</h1> - -<p>#</p> - -<h1>This Python script makes a linear fitting of a data consisting in time and</h1> - -<h1>population. It generates a figure in which the original data and the</h1> - -<h1>fitted curve is plotted.  Finally, it saves the fitting parameters.</h1> - -<h1>Original author:</h1> - -<h1>Copyright (C) 2020, Raul Infante-Sainz <a href="mailto:infantesainz@gmail.com">infantesainz@gmail.com</a></h1> - -<h1>Contributing author(s):</h1> - -<h1>Copyright (C) YEAR, YourName YourSurname.</h1> - -<p>#</p> - -<h1>This Python script is free software: you can redistribute it and/or modify it</h1> - -<h1>under the terms of the GNU General Public License as published by the</h1> - -<h1>Free Software Foundation, either version 3 of the License, or (at your</h1> - -<h1>option) any later version.</h1> - -<p>#</p> - -<h1>This Python script is distributed in the hope that it will be useful, but</h1> - -<h1>WITHOUT ANY WARRANTY; without even the implied warranty of</h1> - -<h1>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General</h1> - -<h1>Public License for more details. See <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</h1> - -<h1>Necessary packages</h1> - -<p>import sys +<!DOCTYPE html> +<!-- +    Webpage of Maneage: a framework for managing data lineage + +    Copyright (C) 2020, Mohammad Akhlaghi <mohammad@akhlaghi.org> + +    This file is part of Maneage. Maneage is free software: you can +    redistribute it and/or modify it under the terms of the GNU General +    Public License as published by the Free Software Foundation, either +    version 3 of the License, or (at your option) any later version. + +    Maneage is distributed in the hope that it will be useful, but +    WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +    General Public License for more details. See +    <http://www.gnu.org/licenses/>.  --> + +    <html lang="en-US"> + +        <!-- HTML Header --> +        <head> +            <!-- Title of the page. --> +            <title>Maneage -- Managing data lineage</title> + +            <!-- Enable UTF-8 encoding to easily use non-ASCII charactes --> +            <meta charset="UTF-8"> +            <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> + +            <!-- Put logo beside the address bar --> +            <link rel="shortcut icon" href="./img/favicon.svg" /> + +            <!-- The viewport meta tag is placed mainly for mobile browsers +                that are pre-configured in different ways (for example setting the +                different widths for the page than the actual width of the device, +                or zooming to different values. Without this the CSS media +                solutions might not work properly on all mobile browsers.--> +                <meta name="viewport" +                      content="width=device-width, initial-scale=1"> + +                <!-- Basic styles --> +                <link rel="stylesheet" href="css/base.css" /> +        </head> + + + + +        <!-- Start the main body. --> +        <body> +            <div id="container"> +                <header role="banner"> +                    <!-- global navigation --> +                    <nav role="navigation" id="hamnav"> +                        <label for="hamburger">☰</label> +                        <input type="checkbox" id="hamburger"/> +                        <div id="hamitems" class="button"> +                            <a href="index.html">Home</a> +                            <a href="about.html">About</a> +                            <a href="http://git.maneage.org/project.git/">⤓ Git Repository</a> +                            <a href="pdf/slides-intro.pdf">Tutorials</a> +                        </div> +                    </nav> +                </header> +                <h1>Maneage tutorial</h1> + +                <p>Copyright (C) 2020 Raul Infante-Sainz <a href="mailto:infantesainz@gmail.com">infantesainz@gmail.com</a><br /> +                Copyright (C) 2020 Mohammad Akhlaghi <a href="mailto:mohammad@akhlaghi.org">mohammad@akhlaghi.org</a><br /> +                See the end of the file for license conditions.</p> + +                <p>This document is a tutorial in which it is described how <code>Maneage</code> +                (management + lineage) works in practice. It is highly recommended to read +                the <code>README-hacking.md</code> in order to have a clear idea of what is this +                project about. Actually, in this tutorial it is assumed you have the project +                already set up and working properly. In order to do it, please, read and +                follow all the steps described in the sections <code>Customization checklist</code> up +                to the section <code>Title, short description and author</code> (including the last +                one).</p> + +                <p>With the current tutorial, the reader will be able to have a fully +                reproducible paper describing a small research example carried out step by +                step. The research example is very simple: it will consist in analyse a +                dataset with two columns (time and population). The analysis will be just to +                make a linear fitting of the data, and then, write the results in a small +                paragraph into the final paper.</p> + +                <p>In the following, the tutorial assume you have three different directories. +                You had to set up them in the configure step:</p> + +                <ul> +                    <li><p><code>input-directory</code>: Necessary input data for the project is in this +                        directory.</p></li> +                    <li><p><code>project-directory</code>: This directory contains the project itself (source +                        codes), it is under <code>Git</code> control.</p></li> +                    <li><p><code>build-directory</code>: Output directory of the project, it is where all the +                        necessary software and the results of the project are saved.</p></li> +                </ul> + +                <p><strong><em>IMPORTANT NOTE</em></strong>: the tutorial assume you are always in +                <code>project-directory</code> when considering command lines.</p> + +                <p><strong>In short:</strong> this hands on tutorial will guide you through a simple +                research example in order to show the workflow in <code>Maneage</code>. The tutorial +                describes by step how to download a small file containg data, analyse the +                data (by making a linear fitting), and finally write a small paragraph with +                the fitting parameters into the final paper. All of this will be done in the +                same Makefile.</p> + +                <h2>Installing available software: Matplotlib</h2> + +                <p>If all steps above have been done successfully, you are ready to start +                including your own analysis scripts. But, before that, let's install +                <code>Matplotlib</code> Python package, which will be used later in the analysis of the +                data when obtaining the linear fit figure. This Python package will be used +                as an example on how to install programs that are already available in +                <code>Maneage</code>. Just open the Makefile +                <code>reproduce/software/config/installation/TARGETS.mk</code> and add to the +                <code>top-level-python</code> line, the word <code>matplotlib</code>.</p> + +                <pre><code> +# Python libraries/modules. +                    top-level-python    = astropy matplotlib +                </code></pre> + +                <p>After that, run the configure step again with the option <code>-e</code> to continue +                using the same configuration options given before (input and build +                directories). Also, run the prepare and make steps:</p> + +                <pre><code> +./project configure -e +./project prepare +./project make +                </code></pre> +                 +                <p>Open 'paper.pdf' and see if everything is fine. Note that now, <code>Matplotlib</code> +                is appearing in the software appendix at the end of the document.</p> + +                <p>Once you have verified that <code>Matplotlib</code> has been properly installed and it +                appears into the final <code>paper.pdf</code>, you are ready to make the first commit +                of the project. With the next commands, you will see which files have been +                modified, what are the modifications, prepare them to be commited, and make +                the commit. In the commit process, <code>Git</code> will open the text editor for +                writting the commit message. Take into account that all changes commited +                will be preserved in the history of your project. So, it is a good practice +                to take some time to describe properly what have been done/changed/added. +                Finally, as this is the very first commit of the project, tag this as the +                zero-th version.</p> + +                <pre><code> +git status         # See which files have been changed. +git diff           # See the lines you have modified. +git add -u         # Put all tracked changes in staging area. +git status         # Make sure everything is fine. +git commit         # Your first commit, add a nice description. +git tag -a v0.0    # Tag this as the zero-th version of your project. +                </code></pre> + +                <p>Now, have a look at the <code>Git</code> history of the project. Note that the local +                master branch is one commit above than the remote origin/master branch. +                After that, push your first commit and its tag to your remote repository +                with the next commands. Since you had setup your <code>master</code> branch to follow +                <code>origin/master</code>, you can just use <code>git push</code>.</p> + +                <pre><code> +git log --oneline --decorate --all --graph   # Have a look at the Git history. +git push                                     # Push the commit to the remote/origin. +git push --tags                              # Push all tags to the remote/origin. +                </code></pre> + +                <p>Now it is time to start including your own scripts to download and make the +                analysis of the data. It is important to bear in mind that the goal of this +                tutorial is to give a general view of the workflow in <code>Maneage</code>. In this +                sense, only a few basic concepts about <code>Make</code> and how it is used into this +                project will be given. <code>Maneage</code> is much more powerfull and much more things +                than the ones showed in this tutorial can be done. So, read carefully all +                the documentation and comments already available into each file, be creative +                and experiment making your own research.</p> + +                <p>In the following, the tutorial will be focused in download the data, analyse +                the data, and finally write the results into the final paper. As a +                consequence, there are a lot of things already done that are not necessary. +                For example, all the text of the final paper already written into the +                <code>paper.tex</code> file, some Makefiles to download images from the Hubble Space +                Telescope and analyse them, etc. In your own research, all of this work +                would be removed. However, in this tutorial they are not removed because we +                will only show how to do a simple analysis and include a small paragraph +                with the result of the linear fitting.</p> + +                <p><strong>In short:</strong> in this section you have learnt how to install available +                software in <code>Maneage</code>. In this particular case, you installed <code>Matplotlib</code></pre> + +                <h2>Including Python script to make the analysis</h2> + +                <p>You are going to use a small Python script to make the analysis of the data. +                This Python script will be invoked from a Makefile that will be set up +                later. For now, we are going to just create the Python script and put it in +                an appropiate location. All analysis scripts are kept into a subfolder with +                the name of the same file type in <code>reproduce/analysis</code>. For example, the +                Makefiles are saved into the <code>make</code> directory, and bash scripts are saved +                into the <code>bash</code> directory. Since there is any <code>python</code> directory, create it +                with the following command.</p> + +                <pre><code> +mkdir reproduce/analysis/python +                </code></pre> + +                <p>After that, you need the Python script itself. The code is very simple: it +                will take an input file containing two columns (year and population), the +                name of the output file in which the parameters of the linear fit will be +                saved, and the name of the figure showing the original data and the fitted +                curve. Paste the next Python script into a new file named <code>linear-fit.py</code> +                into the directory generated in the above step +                (<code>reproduce/analysis/python</code>).</p> + +                <pre><code> +<span class="comment"># Make a linear fit of an input data set</span> +<span class="comment"># This Python script makes a linear fitting of a data consisting in time and</span> +<span class="comment"># population. It generates a figure in which the original data and the</span> +<span class="comment"># fitted curve is plotted.  Finally, it saves the fitting parameters.</span> +<span class="comment"># Original author:</span> +<span class="comment"># Copyright (C) 2020, Raul Infante-Sainz <a href="mailto:infantesainz@gmail.com">infantesainz@gmail.com</a></span> +<span class="comment"># Contributing author(s):</span> +<span class="comment"># Copyright (C) YEAR, YourName YourSurname.</span> +<span class="comment">#</span> +<span class="comment"># This Python script is free software: you can redistribute it and/or modify it</span> +<span class="comment"># under the terms of the GNU General Public License as published by the</span> +<span class="comment"># Free Software Foundation, either version 3 of the License, or (at your</span> +<span class="comment"># option) any later version.</span> +<span class="comment">#</span> +<span class="comment"># This Python script is distributed in the hope that it will be useful, but</span> +<span class="comment"># WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<span class="comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General</span> +<span class="comment"># Public License for more details. See <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</span> +<span class="comment"># Necessary packages</span> + +import sys  import numpy as np  import matplotlib.pyplot as plt -from scipy.optimize import curve_fit</p> +from scipy.optimize import curve_fit -<h1>Fitting function (linear fit)</h1> +<span class="comment"># Fitting function (linear fit)</span> -<p>def func(x, a, b): -    return a * x + b</p> +def func(x, a, b): +return a * x + b -<h1>Define input and output arguments</h1> +<span class="comment"># Define input and output arguments</span> -<p>ifile = sys.argv[1]    # Input file +ifile = sys.argv[1]    # Input file  ofile = sys.argv[2]    # Output file -ofig  = sys.argv[3]    # Output figure</p> +ofig  = sys.argv[3]    # Output figure -<h1>Read the data from the input file.</h1> +<span class="comment"># Read the data from the input file.</span> -<p>data = np.loadtxt(ifile)</p> +data = np.loadtxt(ifile) -<h1>Time and population:</h1> +<span class="comment"># Time and population:</span> -<h1>time ---------- x</h1> +<span class="comment"># time ---------- x</span> -<h1>population ---- y</h1> +<span class="comment"># population ---- y</span> -<p>x = data[:, 0] -y = data[:, 1]</p> +x = data[:, 0] +y = data[:, 1] -<h1>Make the linear fit</h1> +<span class="comment"># Make the linear fit</span> -<p>params, pcov = curve_fit(func, x, y)</p> +params, pcov = curve_fit(func, x, y) -<h1>Make and save the figure</h1> +<span class="comment"># Make and save the figure</span> -<p>plt.clf() -plt.figure()</p> +plt.clf() +plt.figure() -<p>plt.plot(x, y, 'bo', label="Original data") -plt.plot(x, func(x, *params), 'r-', label="Fitted curve")</p> +plt.plot(x, y, 'bo', label="Original data") +plt.plot(x, func(x, *params), 'r-', label="Fitted curve") -<p>plt.title('Population along time') +plt.title('Population along time')  plt.xlabel('Time (year)')  plt.ylabel('Population (million people)')  plt.legend() -plt.grid()</p> - -<p>plt.savefig(ofig, format='PDF', bbox_inches='tight')</p> - -<h1>Save the fitting parameters</h1> - -<p>np.savetxt(ofile, params, fmt='%.3f') -```</p> - -<p>Have a look at this Python script. At the very beginning, it has a block of -commented lines with a descriptive title, a small paragraph describing the -the script, and the copyright with the contact information. For each file, -it is very important to have such kind of meta-data. Below these lines, -there is the source code itself.</p> - -<p>As it can be seen, this Python script (<code>linear-fit.py</code>) is designed to be -invoked from the command line in the following way.</p> - -<p><code>shell -$ python /path/to/linear-fit.py /path/to/input.dat /path/to/output.dat /path/to/figure.pdf -</code></p> - -<p><code>/path/to/input.dat</code> is the input data file, <code>/path/to/output.dat</code> is the -output data file (with the fitted parameters), and <code>/path/to/figure.pdf</code> is -the plotted figure.</p> - -<p>You will do this invokation inside of a Make rule (that will be set up -later). Now that you have included this Python script, make a commit in -order to save this work. With the first command you will see the files with -modifications. With the second command, you can check what are the changes. -Correct, add and modify whatever you want in order to include more -information, comments or clarify any step. After that, add the files and -commit the work. Finally, push the commit to the remote/origin.</p> - -<p><code>shell -$ git status                                       # See which files you have changed. -$ git diff                                         # See the lines you have added/changed. -$ git add reproduce/analysis/python/linear-fit.py  # Put all tracked changes in staging area. -$ git commit                                       # Commit, add a nice descriptions. -$ git push                                         # Push the commit to the remote/origin. -</code></p> +plt.grid() -<p>Check that everything is fine having a look at the <code>Git</code> history of the -project. Note that the <code>master</code> branch has been increased in one commit, -while the <code>template</code> branch is behind.</p> - -<p><code>shell -$ git log --oneline --decorate --all --graph  # See the `Git` history. -</code></p> - -<p><strong>In short</strong>: in this section you have included a <code>Python</code> script that will -be used for making the linear fitting.</p> - -<h2>Downloading data</h2> - -<p>As it was said before, there are multiple things that are already included -into the project. One of them is to use a dedicated Makefile to manage all -necessary download of the input data -(<code>reproduce/analysis/make/download.mk</code>). By appropiate modifications of this -file, you would be able to download the necessary data. However, in order to -keep this tutorial as simple as possible, we will describe how to download -the data you need more explicity.</p> - -<p>The data needed by this tutorial consist in a simple plain text file -containing two rows: time (year) and population (in million of people). This -data correspond to Spain, and it can be downloaded from this URL: -<code>http://akhlaghi.org/data/template-tutorial/ESP.dat</code>. But don't do that -using your browser, you have to do it into <code>Maneage</code>!</p> - -<p>Let's create a Makefile for downloading the data. Later, you will also -include (in the same Makefile) the necessary work in order to make the -analysis. Save this Makefile in the dedicated directory -(<code>reproduce/analysis/make</code>) with the name <code>getdata-analysis.mk</code>. In that -Makefile, paste the following code.</p> - -<p>```</p> - -<h1>Download data for the tutorial</h1> - -<p>#</p> - -<h1>In this Makefile, data for the tutorial is downloaded.</h1> - -<p>#</p> - -<h1>Copyright (C) 2020 Raul Infante-Sainz <a href="mailto:infantesainz@gmail.com">infantesainz@gmail.com</a></h1> - -<h1>Copyright (C) YYYY Your Name <a href="mailto:your-email@example.xxx">your-email@example.xxx</a></h1> - -<p>#</p> - -<h1>This Makefile is free software: you can redistribute it and/or modify it</h1> - -<h1>under the terms of the GNU General Public License as published by the</h1> - -<h1>Free Software Foundation, either version 3 of the License, or (at your</h1> - -<h1>option) any later version.</h1> - -<p>#</p> - -<h1>This Makefile is distributed in the hope that it will be useful, but</h1> - -<h1>WITHOUT ANY WARRANTY; without even the implied warranty of</h1> - -<h1>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General</h1> - -<h1>Public License for more details. See <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</h1> - -<h1>Download data for the tutorial</h1> - -<h1>------------------------------</h1> +plt.savefig(ofig, format='PDF', bbox_inches='tight') +<span class="comment"># Save the fitting parameters</span> +np.savetxt(ofile, params, fmt='%.3f') +</code></pre> -<p># +                <p>Have a look at this Python script. At the very beginning, it has a block of +                commented lines with a descriptive title, a small paragraph describing the +                the script, and the copyright with the contact information. For each file, +                it is very important to have such kind of meta-data. Below these lines, +                there is the source code itself.</p> + +                <p>As it can be seen, this Python script (<code>linear-fit.py</code>) is designed to be +                invoked from the command line in the following way.</p> + +                <pre><code> +python /path/to/linear-fit.py /path/to/input.dat /path/to/output.dat /path/to/figure.pdf +                </code></pre> + +                <p><code>/path/to/input.dat</code> is the input data file, <code>/path/to/output.dat</code> is the +                output data file (with the fitted parameters), and <code>/path/to/figure.pdf</code> is +                the plotted figure.</p> + +                <p>You will do this invokation inside of a Make rule (that will be set up +                later). Now that you have included this Python script, make a commit in +                order to save this work. With the first command you will see the files with +                modifications. With the second command, you can check what are the changes. +                Correct, add and modify whatever you want in order to include more +                information, comments or clarify any step. After that, add the files and +                commit the work. Finally, push the commit to the remote/origin.</p> + +                <pre><code> +git status                                       # See which files you have changed. +git diff                                         # See the lines you have added/changed. +git add reproduce/analysis/python/linear-fit.py  # Put all tracked changes in staging area. +git commit                                       # Commit, add a nice descriptions. +git push                                         # Push the commit to the remote/origin. +                </code></pre> + +                <p>Check that everything is fine having a look at the <code>Git</code> history of the +                project. Note that the <code>master</code> branch has been increased in one commit, +                while the <code>template</code> branch is behind.</p> + +                <pre><code> +git log --oneline --decorate --all --graph  # See the `Git` history. +                </code></pre> + +                <p><strong>In short</strong>: in this section you have included a <code>Python</code> script that will +                be used for making the linear fitting.</p> + +                <h2>Downloading data</h2> + +                <p>As it was said before, there are multiple things that are already included +                into the project. One of them is to use a dedicated Makefile to manage all +                necessary download of the input data +                (<code>reproduce/analysis/make/download.mk</code>). By appropiate modifications of this +                file, you would be able to download the necessary data. However, in order to +                keep this tutorial as simple as possible, we will describe how to download +                the data you need more explicity.</p> + +                <p>The data needed by this tutorial consist in a simple plain text file +                containing two rows: time (year) and population (in million of people). This +                data correspond to Spain, and it can be downloaded from this URL: +                <code>http://akhlaghi.org/data/template-tutorial/ESP.dat</code>. But don't do that +                using your browser, you have to do it into <code>Maneage</code>!</p> + +                <p>Let's create a Makefile for downloading the data. Later, you will also +                include (in the same Makefile) the necessary work in order to make the +                analysis. Save this Makefile in the dedicated directory +                (<code>reproduce/analysis/make</code>) with the name <code>getdata-analysis.mk</code>. In that +                Makefile, paste the following code.</p> +                <pre><code> +<span class="comment"># Download data for the tutorial</span> +<span class="comment">#</span> +<span class="comment"># In this Makefile, data for the tutorial is downloaded.</span> +<span class="comment">#</span> +<span class="comment"># Copyright (C) 2020 Raul Infante-Sainz <a href="mailto:infantesainz@gmail.com">infantesainz@gmail.com</a></span> +<span class="comment"># Copyright (C) YYYY Your Name <a href="mailto:your-email@example.xxx">your-email@example.xxx</a></span> +<span class="comment">#</span> +<span class="comment"># This Makefile is free software: you can redistribute it and/or modify it</span> +<span class="comment"># under the terms of the GNU General Public License as published by the</span> +<span class="comment"># Free Software Foundation, either version 3 of the License, or (at your</span> +<span class="comment"># option) any later version.</span> +<span class="comment">#</span> +<span class="comment"># This Makefile is distributed in the hope that it will be useful, but</span> +<span class="comment"># WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<span class="comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General</span> +<span class="comment"># Public License for more details. See <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</span> +<span class="comment"># Download data for the tutorial</span> +<span class="comment"># ------------------------------</span> +<span class="comment">#</span>  pop-data = $(indir)/ESP.dat  $(pop-data): | $(indir) -        wget http://akhlaghi.org/data/template-tutorial/ESP.dat -O $@</p> - -<h1>Final TeX macro</h1> - -<h1>---------------</h1> - -<p>#</p> - -<h1>It is very important to mention the address where the data were</h1> - -<h1>downloaded in the final report.</h1> - -<p>$(mtexdir)/getdata-analysis.tex: $(pop-data) | $(mtexdir) -        echo "\newcommand{\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@ -```</p> - -<p>Have a look at this Makefile and see the different parts. The first line is -a descriptive title. Below, include your name, contact email, and finally, -the copyright. Please, take your time in order to add all relevant -information in each Makefile you modify. As you can see, these lines start -with <code>#</code> because they are comments.</p> - -<p>After that information, there are five white lines in order to separate the -different parts. Then, you have the Make rule to download the data. Remember -the general structure of a Make rule:</p> - -<p><code> -TARGETS: PREREQUISITES -    RECIPE -</code></p> - -<p>In a rule, it is said how to construct the <code>TARGETS</code> from the -<code>PREREQUISITES</code>, following the <code>RECIPE</code>. <strong>Note that the white space at the -beginning of the <code>RECIPE</code> are not spaces but a single <code>TAB</code>. Take into -account this if you copy/paste the code.</strong></p> - -<p>Now you can see this structure in our particular case:</p> - -<p><code> -$(pop-data): | $(indir) -        wget http://akhlaghi.org/data/template-tutorial/ESP.dat -O $@ -</code></p> - -<p>Here we have:</p> - -<ul> -<li><p><code>$(pop-data)</code> is the TARGET. It is previously defined just one line above: -<code>pop-data = $(indir)/ESP.dat</code>. As it can be seen, the target is just one -file named <code>ESP.dat</code> into the <code>indir</code> directory.</p></li> -<li><p><code>$(indir)</code> is the PREREQUISITE. In this case, nothing is needed for -obtaining the TARGET, just the output directory in which it is going to be -saved. This is the reason of having the pipe <code>|</code> at the beginning of the -prerequisite (it indicates an order-only-prerequisite).</p></li> -<li><p><code>wget http://akhlaghi.org/data/template-tutorial/ESP.dat -O $@</code> is the -RECIPE. It states how to construct the <code>TARGET</code> from the <code>PREREQUISITE</code>. -In this case, it is just the use of <code>wget</code> to download the file specified -in the <code>URL</code> (<code>http://akhlaghi.org/data/template-tutorial/ESP.dat</code>) and -save it as the target: <code>-O $@</code>. Inisde of a Make rule, <code>$@</code> is the target. -So, in this case: <code>$@</code> is <code>$(pop-data)</code>.</p></li> -</ul> - -<p>With this, you have included the rule that will download the data. Now, to -finish, you have to specify what is the final purpose of the Makefile: -download that data! This is done by setting <code>$(pop-data)</code> as a prerequisite -of the final rule. Remember that each Makefile will build a final target -with the same name as the Makefile, but with the extension <code>.tex</code>. As a -consequence, they will be <code>TeX</code> macros in which relevant information to be -included into the final paper are saved . Here, you are saving the <code>URL</code>.</p> - -<p><code> +wget http://akhlaghi.org/data/template-tutorial/ESP.dat -O $@ +<span class="comment"># Final TeX macro</span> +<span class="comment"># ---------------</span> +<span class="comment">#</span> +<span class="comment"># It is very important to mention the address where the data were</span> +<span class="comment"># downloaded in the final report.</span>  $(mtexdir)/getdata-analysis.tex: $(pop-data) | $(mtexdir) -        echo "\\newcommand{\\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@ -</code></p> - -<p>In this final rule we have:</p> - -<ul> -<li><p><code>$(mtexdir)/getdata-analysis.tex</code> is the TARGET. It is the <code>TeX</code> macro. -Note that it has the same name as the Makefile itself, but it will be -saved into the <code>$(mtexdir)</code> directory. What do I need for constructing -this target? The prerequisites.</p></li> -<li><p><code>$(pop-data) | $(mtexdir)</code> are the PREREQUISITES. In this case you have -two prerequisites. First, <code>$(pop-data)</code>, which indicates that the final -<code>TeX</code> macro has to be generated after this file has been obtained. The -second prerequisite is order-only-prerequisite, and it is the directory in -which the target is saved: <code>$(mtexdir)</code>.</p></li> -<li><p><code>echo "\\newcommand{\\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@</code> -is the RECIPE. Basically, it writes the text -<code>\\newcommand{\\popurl}{http://akhlaghi.org/data/template-tutorial}</code> into -the TARGET (<code>$@</code>). As you can see, this is the definition of a new -command in <code>TeX</code>. The definition of this new command <code>\popurl</code> will be used -for writting the final paper.</p></li> -</ul> - -<p>Only one step is remaining to finally make the download of the data. You -have to add the name (without the extension .mk) of this Makefile into the -<code>reproduce/analysis/make/top-make.mk</code> Makefile. There it is defined which -Makefiles have to be executed. You have to end up having:</p> - -<p><code> +echo "\newcommand{\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@ +                </code></pre> +                <p>Have a look at this Makefile and see the different parts. The first line is +                a descriptive title. Below, include your name, contact email, and finally, +                the copyright. Please, take your time in order to add all relevant +                information in each Makefile you modify. As you can see, these lines start +                with <code>#</code> because they are comments.</p> + +                <p>After that information, there are five white lines in order to separate the +                different parts. Then, you have the Make rule to download the data. Remember +                the general structure of a Make rule:</p> + +                <pre><code> +TARGETS: PREREQUISITES +RECIPE +                </code></pre> + +                <p>In a rule, it is said how to construct the <code>TARGETS</code> from the +                <code>PREREQUISITES</code>, following the <code>RECIPE</code>. <strong>Note that the white space at the +                    beginning of the <code>RECIPE</code> are not spaces but a single <code>TAB</code>. Take into +                    account this if you copy/paste the code.</strong></p> + +                <p>Now you can see this structure in our particular case:</p> + +                <pre><code> +(pop-data): | $(indir) +wget http://akhlaghi.org/data/template-tutorial/ESP.dat -O $@ +                </code></pre> + +                <p>Here we have:</p> + +                <ul> +                    <li><p><code>$(pop-data)</code> is the TARGET. It is previously defined just one line above: +                        <code>pop-data = $(indir)/ESP.dat</code>. As it can be seen, the target is just one +                        file named <code>ESP.dat</code> into the <code>indir</code> directory.</p></li> +                    <li><p><code>$(indir)</code> is the PREREQUISITE. In this case, nothing is needed for +                        obtaining the TARGET, just the output directory in which it is going to be +                        saved. This is the reason of having the pipe <code>|</code> at the beginning of the +                        prerequisite (it indicates an order-only-prerequisite).</p></li> +                    <li><p><code>wget http://akhlaghi.org/data/template-tutorial/ESP.dat -O $@</code> is the +                        RECIPE. It states how to construct the <code>TARGET</code> from the <code>PREREQUISITE</code>. +                        In this case, it is just the use of <code>wget</code> to download the file specified +                        in the <code>URL</code> (<code>http://akhlaghi.org/data/template-tutorial/ESP.dat</code>) and +                        save it as the target: <code>-O $@</code>. Inisde of a Make rule, <code>$@</code> is the target. +                        So, in this case: <code>$@</code> is <code>$(pop-data)</code>.</p></li> +                </ul> + +                <p>With this, you have included the rule that will download the data. Now, to +                finish, you have to specify what is the final purpose of the Makefile: +                download that data! This is done by setting <code>$(pop-data)</code> as a prerequisite +                of the final rule. Remember that each Makefile will build a final target +                with the same name as the Makefile, but with the extension <code>.tex</code>. As a +                consequence, they will be <code>TeX</code> macros in which relevant information to be +                included into the final paper are saved . Here, you are saving the <code>URL</code>.</p> + +                <pre><code> +(mtexdir)/getdata-analysis.tex: $(pop-data) | $(mtexdir) +echo "\\newcommand{\\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@ +                </code></pre> + +                <p>In this final rule we have:</p> + +                <ul> +                    <li><p><code>$(mtexdir)/getdata-analysis.tex</code> is the TARGET. It is the <code>TeX</code> macro. +                        Note that it has the same name as the Makefile itself, but it will be +                        saved into the <code>$(mtexdir)</code> directory. What do I need for constructing +                        this target? The prerequisites.</p></li> +                    <li><p><code>$(pop-data) | $(mtexdir)</code> are the PREREQUISITES. In this case you have +                        two prerequisites. First, <code>$(pop-data)</code>, which indicates that the final +                        <code>TeX</code> macro has to be generated after this file has been obtained. The +                        second prerequisite is order-only-prerequisite, and it is the directory in +                        which the target is saved: <code>$(mtexdir)</code>.</p></li> +                    <li><p><code>echo "\\newcommand{\\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@</code> +                        is the RECIPE. Basically, it writes the text +                        <code>\\newcommand{\\popurl}{http://akhlaghi.org/data/template-tutorial}</code> into +                        the TARGET (<code>$@</code>). As you can see, this is the definition of a new +                        command in <code>TeX</code>. The definition of this new command <code>\popurl</code> will be used +                        for writting the final paper.</p></li> +                </ul> + +                <p>Only one step is remaining to finally make the download of the data. You +                have to add the name (without the extension .mk) of this Makefile into the +                <code>reproduce/analysis/make/top-make.mk</code> Makefile. There it is defined which +                Makefiles have to be executed. You have to end up having:</p> + +                <pre><code>  makesrc = initialize \ -          download \ -          getdata-analyse \ -          delete-me \ -          paper -</code></p> - -<p>As allways, read carefully all comments and information in order to know -what is going ong. Also, add your own comments and information in order to -be clear and explain each step with enough level of detail. If everything is -fine, now the project is ready to download the data in the make step. Try -it!</p> - -<p><code>shell -$ ./project make -</code></p> - -<p>Hopefully, it will download and save the file into the folder called -<code>inputs</code> under the <code>build-directory</code>. Check that it is there, and also have -a look at the <code>TeX</code> macro in order to see that the new command has been -included, it is into the top-build directory: -<code>build-directory/tex/macros/getdata-analysis.tex</code>.</p> - -<p>Now that all of this changes have been included and it works fine, it is -time to check little by little everything and make a commit order to save -this work. Remember to put a good commit title and a nice commit message -describing what you have done and why. Then, push the commit to the -remote/origin.</p> - -<p>Congratulations! You have included you first Makefile and the data is now -ready to be analysed!</p> - -<p><strong>In short</strong>, to download the data you did the following:</p> - -<ul> -<li>Create a Makefile: <code>reproduce/analysis/make/getdata-analysis.mk</code></li> -<li>Write meta-data at the beginning: title, your name, email, copyright, etc.</li> -<li>Define the file you want to download, and the rule to do it.</li> -<li>Write the rule to generate the <code>TeX</code> macro, putting as prerequisite, the -file you are downloading.</li> -<li>Add the name of the Makefile (without the <code>.tex</code>) into -<code>reproduce/analysis/make/top-make.mk</code></li> -<li><code>$ ./project make</code> in order to execute the project and download -the data.</li> -<li>Check that everything worked fine by loking at the downloaded file and the -<code>TeX</code> macro.</li> -<li>Commit and push all the work included.</li> -</ul> - -<h2>Adding the analysis rule</h2> - -<p>Until this point, you have included the Python script that will do the -linear fitting, and the rule for downloading the data. Now, it is necessary -to construct the Make rule in which this Python script is invoked to do the -analysis. This rule will be put in the same Makefile you have already -generated for downloading the data. But, before this, define the directory -in which the target is going to be saved.</p> - -<p><code> +download \ +getdata-analyse \ +delete-me \ +paper +                </code></pre> + +                <p>As allways, read carefully all comments and information in order to know +                what is going ong. Also, add your own comments and information in order to +                be clear and explain each step with enough level of detail. If everything is +                fine, now the project is ready to download the data in the make step. Try +                it!</p> + +                <pre><code> +./project make +                </code></pre> + +                <p>Hopefully, it will download and save the file into the folder called +                <code>inputs</code> under the <code>build-directory</code>. Check that it is there, and also have +                a look at the <code>TeX</code> macro in order to see that the new command has been +                included, it is into the top-build directory: +                <code>build-directory/tex/macros/getdata-analysis.tex</code>.</p> + +                <p>Now that all of this changes have been included and it works fine, it is +                time to check little by little everything and make a commit order to save +                this work. Remember to put a good commit title and a nice commit message +                describing what you have done and why. Then, push the commit to the +                remote/origin.</p> + +                <p>Congratulations! You have included you first Makefile and the data is now +                ready to be analysed!</p> + +                <p><strong>In short</strong>, to download the data you did the following:</p> + +                <ul> +                    <li>Create a Makefile: <code>reproduce/analysis/make/getdata-analysis.mk</code></li> +                    <li>Write meta-data at the beginning: title, your name, email, copyright, etc.</li> +                    <li>Define the file you want to download, and the rule to do it.</li> +                    <li>Write the rule to generate the <code>TeX</code> macro, putting as prerequisite, the +                        file you are downloading.</li> +                    <li>Add the name of the Makefile (without the <code>.tex</code>) into +                        <code>reproduce/analysis/make/top-make.mk</code></li> +                    <li><code>$ ./project make</code> in order to execute the project and download +                        the data.</li> +                    <li>Check that everything worked fine by loking at the downloaded file and the +                        <code>TeX</code> macro.</li> +                    <li>Commit and push all the work included.</li> +                </ul> + +                <h2>Adding the analysis rule</h2> + +                <p>Until this point, you have included the Python script that will do the +                linear fitting, and the rule for downloading the data. Now, it is necessary +                to construct the Make rule in which this Python script is invoked to do the +                analysis. This rule will be put in the same Makefile you have already +                generated for downloading the data. But, before this, define the directory +                in which the target is going to be saved.</p> + +                <pre><code>  odir = $(BDIR)/fit-parameters -</code></p> +                </code></pre> -<p>This is a folder under the <code>build-directory</code> called <code>fit-parameters</code>. After -that, define the target: a plain text file in which the linear fit -parameters are saved (by the Python script). Put it into the previously -defined directory. As the data is from Spain, name it <code>ESP.txt</code>.</p> +                <p>This is a folder under the <code>build-directory</code> called <code>fit-parameters</code>. After +                that, define the target: a plain text file in which the linear fit +                parameters are saved (by the Python script). Put it into the previously +                defined directory. As the data is from Spain, name it <code>ESP.txt</code>.</p> -<p><code> +                <pre><code>  param-file = $(odir)/ESP.txt -</code></p> - -<p>Now, include a rule to construct the output directory <code>odir</code>. This is -necessary because this directory is needed for saving the file <code>ESP.txt</code>.</p> - -<p><code> -$(odir): -        mkdir $@ -</code></p> - -<p>With all the previous definitions, now it is possible to set the rule for -making the analysis:</p> - -<p><code> -$(param-file): $(indir)/ESP.dat | $(odir) -        python reproduce/analysis/python/linear-fit.py $< $@ $(odir)/ESP.pdf -</code></p> - -<p>In this rule you have:</p> - -<ul> -<li><p><code>$(param-file)</code> is the TARGET. It is the file previously defined in which -the fitting parameters will be saved.</p></li> -<li><p><code>$(indir)/ESP.dat | $(odir)</code> are the PREREQUISITES. In this case you have -two prerequisites. First, <code>$(indir)/ESP.dat</code>, which is the input file -previously downloaded by the rule above. In this file there is the input -data that the Python script will use for making the linear fit. <code>$(odir)</code> -is the second prerequisite. It is order-only-prerequisite (indicated by -the pipe <code>|</code>), and it is the directory where the target is saved.</p></li> -<li><p><code>python reproduce/analysis/python/linear-fit.py $< $@ $(odir)/ESP.pdf</code> is -the RECIPE. Basically, it call <code>python</code> to run the script -<code>reproduce/analysis/python/linear-fit.py</code> with the necessary arguments: -the input file <code>$<</code>, the target <code>$@</code>, and the name of the figure -<code>$(odir)/ESP.pdf</code> (a PDF figure saved into the same directory than the -target.</p></li> -</ul> - -<p>Finally, in order to indicate you want to obtain the target you have just -included (<code>$(param-file)</code>), it is necessary to add it as a prerequisite of -the final TARGET <code>$(mtexdir)/linear-fit.tex</code>. So, in the last rule (which -creates the <code>TeX</code> macro), remove <code>$(pop-data)</code> and put <code>$(param-file)</code> -instead. By doing this, you are telling to the Makefile that you want to -obtain the file in which it is saved the fitted parameters. Inside of the -rule, define a couple of bash variables (<code>a</code> and <code>b</code>) that are the fitted -parameters extracted from the prerequisite. For <code>a</code>:</p> - -<p><code> +                </code></pre> + +                <p>Now, include a rule to construct the output directory <code>odir</code>. This is +                necessary because this directory is needed for saving the file <code>ESP.txt</code>.</p> + +                <pre><code> +(odir): +mkdir $@ +                </code></pre> + +                <p>With all the previous definitions, now it is possible to set the rule for +                making the analysis:</p> + +                <pre><code> +(param-file): $(indir)/ESP.dat | $(odir) +python reproduce/analysis/python/linear-fit.py $< $@ $(odir)/ESP.pdf +                </code></pre> + +                <p>In this rule you have:</p> + +                <ul> +                    <li><p><code>$(param-file)</code> is the TARGET. It is the file previously defined in which +                        the fitting parameters will be saved.</p></li> +                    <li><p><code>$(indir)/ESP.dat | $(odir)</code> are the PREREQUISITES. In this case you have +                        two prerequisites. First, <code>$(indir)/ESP.dat</code>, which is the input file +                        previously downloaded by the rule above. In this file there is the input +                        data that the Python script will use for making the linear fit. <code>$(odir)</code> +                        is the second prerequisite. It is order-only-prerequisite (indicated by +                        the pipe <code>|</code>), and it is the directory where the target is saved.</p></li> +                    <li><p><code>python reproduce/analysis/python/linear-fit.py $< $@ $(odir)/ESP.pdf</code> is +                        the RECIPE. Basically, it call <code>python</code> to run the script +                        <code>reproduce/analysis/python/linear-fit.py</code> with the necessary arguments: +                        the input file <code>$<</code>, the target <code>$@</code>, and the name of the figure +                        <code>$(odir)/ESP.pdf</code> (a PDF figure saved into the same directory than the +                        target.</p></li> +                </ul> + +                <p>Finally, in order to indicate you want to obtain the target you have just +                included (<code>$(param-file)</code>), it is necessary to add it as a prerequisite of +                the final TARGET <code>$(mtexdir)/linear-fit.tex</code>. So, in the last rule (which +                creates the <code>TeX</code> macro), remove <code>$(pop-data)</code> and put <code>$(param-file)</code> +                instead. By doing this, you are telling to the Makefile that you want to +                obtain the file in which it is saved the fitted parameters. Inside of the +                rule, define a couple of bash variables (<code>a</code> and <code>b</code>) that are the fitted +                parameters extracted from the prerequisite. For <code>a</code>:</p> + +                <pre><code>  a=$$(cat $< | awk 'NR==1{print $1}') -</code></p> +                </code></pre> -<p>Similarly, for obtaining the parameter <code>b</code> (which is in the second row):</p> +                <p>Similarly, for obtaining the parameter <code>b</code> (which is in the second row):</p> -<p><code> +                <pre><code>  b=$$(cat $< | awk 'NR==2{print $1}') -</code></p> +                </code></pre> -<p>Then you have to specify the new <code>TeX</code> commands for these two parameters, -just write them as it was done before for the <code>URL</code>:</p> +                <p>Then you have to specify the new <code>TeX</code> commands for these two parameters, +                just write them as it was done before for the <code>URL</code>:</p> -<p>``` +                <pre><code>  echo "\newcommand{\afitparam}{$$a}" >> $@ -echo "\newcommand{\bfitparam}{$$b}" >> $@</p> - -<p>```</p> - -<p>So, at the end you will have the final rule like this:</p> - -<p>``` -$(mtexdir)/getdata-analysis.tex: $(param-file) | $(mtexdir)</p> - -<pre><code>    echo "\\newcommand{\\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@ - -    a=$$(cat $< | awk 'NR==1{print $1}') -    b=$$(cat $< | awk 'NR==2{print $1}') - -    echo "\newcommand{\afitparam}{$$a}" >> $@ -    echo "\newcommand{\bfitparam}{$$b}" >> $@ -</code></pre> - -<p>```</p> - -<p><strong>Important notes: you have to use two <code>$</code> in order to use the bash <code>$</code> -character inside of a Make rule. Also, note that you have to put <code>>></code> in -order to not create a new target each time you write someting into the -target. With the double <code>></code> it will only add the line at the end of the file -without generating a new file.</strong></p> - -<p>With all the above modifications, you are ready to obtain the fitting -parameters. If you add the necessary comments and information, the final -Makefile would look similar to:</p> - -<p>```</p> - -<h1>Download data and linear fitting for the tutorial</h1> - -<p>#</p> - -<h1>In this Makefile, data for the tutorial is downloaded. Then, a Python</h1> - -<h1>script is used to make a linear fitting. Finally, fitted parameters as</h1> - -<h1>well as the URL is saved into a TeX macro.</h1> - -<p>#</p> - -<h1>Copyright (C) 2020 Raul Infante-Sainz <a href="mailto:infantesainz@gmail.com">infantesainz@gmail.com</a></h1> - -<h1>Copyright (C) YYYY Your Name <a href="mailto:your-email@example.xxx">your-email@example.xxx</a></h1> - -<p>#</p> - -<h1>This Makefile is free software: you can redistribute it and/or modify it</h1> - -<h1>under the terms of the GNU General Public License as published by the</h1> - -<h1>Free Software Foundation, either version 3 of the License, or (at your</h1> - -<h1>option) any later version.</h1> - -<p>#</p> - -<h1>This Makefile is distributed in the hope that it will be useful, but</h1> - -<h1>WITHOUT ANY WARRANTY; without even the implied warranty of</h1> +echo "\newcommand{\bfitparam}{$$b}" >> $@ +                </code></pre> -<h1>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General</h1> +                <p>So, at the end you will have the final rule like this:</p> -<h1>Public License for more details. See <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</h1> +                <code>(mtexdir)/getdata-analysis.tex: $(param-file) | $(mtexdir)</code> -<h1>Download data for the tutorial</h1> +                <pre><code> +echo "\\newcommand{\\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@ -<h1>------------------------------</h1> - -<p>#</p> - -<h1>The input file is defined and downloaded using the following rule</h1> +a=$$(cat $< | awk 'NR==1{print $1}') +b=$$(cat $< | awk 'NR==2{print $1}') -<p>pop-data = $(indir)/ESP.dat +echo "\newcommand{\afitparam}{$$a}" >> $@ +echo "\newcommand{\bfitparam}{$$b}" >> $@ +                </code></pre> + +                <p><strong>Important notes: you have to use two <code>$</code> in order to use the bash <code>$</code> +                    character inside of a Make rule. Also, note that you have to put <code>>></code> in +                    order to not create a new target each time you write someting into the +                    target. With the double <code>></code> it will only add the line at the end of the file +                    without generating a new file.</strong></p> + +                <p>With all the above modifications, you are ready to obtain the fitting +                parameters. If you add the necessary comments and information, the final +                Makefile would look similar to:</p> +<pre><code> +<span class="comment"># Download data and linear fitting for the tutorial</span> +<span class="comment"># In this Makefile, data for the tutorial is downloaded. Then, a Python</span> +<span class="comment"># script is used to make a linear fitting. Finally, fitted parameters as</span> +<span class="comment"># well as the URL is saved into a TeX macro.</span> +<span class="comment"># Copyright (C) 2020 Raul Infante-Sainz <a href="mailto:infantesainz@gmail.com">infantesainz@gmail.com</a></span> +<span class="comment"># Copyright (C) YYYY Your Name <a href="mailto:your-email@example.xxx">your-email@example.xxx</a></span> +<span class="comment"># This Makefile is free software: you can redistribute it and/or modify it</span> +<span class="comment"># under the terms of the GNU General Public License as published by the</span> +<span class="comment"># Free Software Foundation, either version 3 of the License, or (at your</span> +<span class="comment"># option) any later version.</span> +<span class="comment"># This Makefile is distributed in the hope that it will be useful, but</span> +<span class="comment"># WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<span class="comment"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General</span> +<span class="comment"># Public License for more details. See <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</span> +<span class="comment"># Download data for the tutorial</span> +<span class="comment"># ------------------------------</span> +<span class="comment"># The input file is defined and downloaded using the following rule</span> +pop-data = $(indir)/ESP.dat  $(pop-data): | $(indir) -        # Use wget to download the data -        wget http://akhlaghi.org/data/template-tutorial/ESP.dat -O $@</p> - -<h1>Output directory</h1> - -<h1>----------------</h1> - -<p>#</p> - -<h1>Small rule for constructing the output directory, previously defined</h1> - -<p>odir = $(BDIR)/fit-parameters +<span class="comment"># Use wget to download the data +wget http://akhlaghi.org/data/template-tutorial/ESP.dat -O $@ +<span class="comment"># Output directory</span> +<span class="comment"># ----------------</span> +<span class="comment"># Small rule for constructing the output directory, previously defined</span> +odir = $(BDIR)/fit-parameters  $(odir): -        # Build the output directory -        mkdir $@</p> - -<h1>Linear fitting of the data</h1> - -<h1>--------------------------</h1> - -<p>#</p> - -<h1>The output file is defined into the output directory. The fitted</h1> - -<h1>parameters will be saved into this directory by the Python script.</h1> - -<p>param-file = $(odir)/ESP.txt +<span class="comment"># Build the output directory +mkdir $@ +<span class="comment"># Linear fitting of the data</span> +<span class="comment"># --------------------------</span> +<span class="comment"># The output file is defined into the output directory. The fitted</span> +<span class="comment"># parameters will be saved into this directory by the Python script.</span> +param-file = $(odir)/ESP.txt  $(param-file): $(indir)/ESP.dat | $(odir) -        # Invoke Python to run the script with the input data -        python reproduce/analysis/python/linear-fit.py $< $@ $(odir)/ESP.pdf</p> - -<h1>TeX macros final target</h1> - -<h1>-----------------------</h1> - -<p>#</p> - -<h1>This is how we write the necessary parameters in the final PDF. In this</h1> - -<h1>rule, new TeX parameters are defined from the URL, and the fitted</h1> - -<h1>parameters.</h1> - -<p>$(mtexdir)/getdata-analysis.tex: $(param-file) | $(mtexdir)</p> - -<pre><code>    # Write the URL into the target -    echo "\newcommand{\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@ - -    # Read the fitted parameters and save them into the target -    a=$$(cat $< | awk 'NR==1{print $1}') -    b=$$(cat $< | awk 'NR==2{print $1}') - -    echo "\newcommand{\afitparam}{$$a}" >> $@ -    echo "\newcommand{\bfitparam}{$$b}" >> $@ -</code></pre> +<span class="comment"># Invoke Python to run the script with the input data +python reproduce/analysis/python/linear-fit.py $< $@ $(odir)/ESP.pdf +<span class="comment"># TeX macros final target</span> +<span class="comment"># -----------------------</span> +<span class="comment"># This is how we write the necessary parameters in the final PDF. In this</span> +<span class="comment"># rule, new TeX parameters are defined from the URL, and the fitted</span> +<span class="comment"># parameters.</span> +$(mtexdir)/getdata-analysis.tex: $(param-file) | $(mtexdir) +<span class="comment"># Write the URL into the target</span> +echo "\newcommand{\popurl}{http://akhlaghi.org/data/template-tutorial}" > $@ + +<span class="comment"># Read the fitted parameters and save them into the target</span> +a=$$(cat $< | awk 'NR==1{print $1}') +b=$$(cat $< | awk 'NR==2{print $1}') -<p>```</p> - -<p>Have look at this Makefile and note that it is what it has been described -above. Take your time for making useful comments and modifying whatever you -think it is necessary. If everything is fine, now the project is ready to -download the data <strong>and</strong> make the linear fitting. Try it!</p> - -<p><code>shell -$ ./project make -</code></p> - -<p>Hopefully, now you will have the fitted parameters into the -<code>build-directory/fit-parameters/ESP.txt</code> file, and the figure in the same -directory. Do not pay to much attention at the quality of the fitting. It is -just an example. Also, check that the <code>TeX</code> macro has been created -successfully by having a look at -<code>build-directory/tex/macros/getdata-analyse.tex</code>. Finally, now that you have -ensured that everything is fine, make a commit in order to keep the work -safe. In the next step, you will see how to include this data into the final -paper.</p> - -<p><strong>In short:</strong> with the work included in this section, the project is able to -download and make the linear fitting of the data. The result is the fitted -parameters that are also saved in a <code>TeX</code> macro, and the figure showing the -data with the fitted curve.</p> - -<h2>Editing the final paper</h2> - -<p>With all the previous work, the project is able to download the file -containing the data (two columns, year and population of Spain), and analyse -them by making a linear fitting (y=ax+b). The result is a <code>TeX</code> macro in -which there are the information about the <code>URL</code> of the data and the linear -fitting parameters (<code>a</code> and <code>b</code>). Now, it is time to add a small paragraph -into the paper, just to ilustrate how to write the relevant parameters from -the analysis.</p> - -<p>Before all, make a copy of the current <code>paper.pdf</code> document you have into -the <code>project-directory</code>. This paper is an example that <code>Maneage</code> constructs -by default. Now, you will modify it by adding a small paragraph including -the fitting parameters and the <code>URL</code>. So, open <code>project-directory/paper.tex</code> -and add the following paragraph just at the beginning of the abstract -section.</p> - -<p><code> +echo "\newcommand{\afitparam}{$$a}" >> $@ +echo "\newcommand{\bfitparam}{$$b}" >> $@ +                </code></pre> + +                <p>Have look at this Makefile and note that it is what it has been described +                above. Take your time for making useful comments and modifying whatever you +                think it is necessary. If everything is fine, now the project is ready to +                download the data <strong>and</strong> make the linear fitting. Try it!</p> + +                <pre><code> +./project make +                </code></pre> + +                <p>Hopefully, now you will have the fitted parameters into the +                <code>build-directory/fit-parameters/ESP.txt</code> file, and the figure in the same +                directory. Do not pay to much attention at the quality of the fitting. It is +                just an example. Also, check that the <code>TeX</code> macro has been created +                successfully by having a look at +                <code>build-directory/tex/macros/getdata-analyse.tex</code>. Finally, now that you have +                ensured that everything is fine, make a commit in order to keep the work +                safe. In the next step, you will see how to include this data into the final +                paper.</p> + +                <p><strong>In short:</strong> with the work included in this section, the project is able to +                download and make the linear fitting of the data. The result is the fitted +                parameters that are also saved in a <code>TeX</code> macro, and the figure showing the +                data with the fitted curve.</p> + +                <h2>Editing the final paper</h2> + +                <p>With all the previous work, the project is able to download the file +                containing the data (two columns, year and population of Spain), and analyse +                them by making a linear fitting (y=ax+b). The result is a <code>TeX</code> macro in +                which there are the information about the <code>URL</code> of the data and the linear +                fitting parameters (<code>a</code> and <code>b</code>). Now, it is time to add a small paragraph +                into the paper, just to ilustrate how to write the relevant parameters from +                the analysis.</p> + +                <p>Before all, make a copy of the current <code>paper.pdf</code> document you have into +                the <code>project-directory</code>. This paper is an example that <code>Maneage</code> constructs +                by default. Now, you will modify it by adding a small paragraph including +                the fitting parameters and the <code>URL</code>. So, open <code>project-directory/paper.tex</code> +                and add the following paragraph just at the beginning of the abstract +                section.</p> + +                <pre><code>  By following the steps described in the tutorial, I have been able to obtain this reproducible paper!  The project is very simple and it consists in download a file (from \popurl), and make an easy linear fit using a Python script.  The linear fitting is $y=a*x+b$, with the following parameters: $a=\afitparam$ and $b=\bfitparam$ -</code></p> - -<p>As you can see, the <code>TeX</code> definitions done before in the Makefiles, are now -included into the paper: <code>\popurl</code>, <code>\afitparam</code>, and <code>\bfitparam</code>. If you -do again the make step <code>$ ./project make</code>, you will re-compile the paper -including this paragraph. Check that it is true and compare with the -previous version, of the paper. Contratulations! You have complete this -tutorial and now you are able to use <code>Maneage</code> for making your exciting -research in a reproducible way!</p> - -<h2>Copyright information</h2> - -<p>This file is part of the reproducible paper template -   http://savannah.nongnu.org/projects/reproduce</p> - -<p>This template is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version.</p> - -<p>This template is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details.</p> - -<p>You should have received a copy of the GNU General Public License along -with Template.  If not, see <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.</p> +                </code></pre> + +                <p>As you can see, the <code>TeX</code> definitions done before in the Makefiles, are now +                included into the paper: <code>\popurl</code>, <code>\afitparam</code>, and <code>\bfitparam</code>. If you +                do again the make step <code>$ ./project make</code>, you will re-compile the paper +                including this paragraph. Check that it is true and compare with the +                previous version, of the paper. Contratulations! You have complete this +                tutorial and now you are able to use <code>Maneage</code> for making your exciting +                research in a reproducible way!</p> + +                <h2>Copyright information</h2> + +                <p>This file is part of the reproducible paper template +                http://savannah.nongnu.org/projects/reproduce</p> + +                <p>This template is free software: you can redistribute it and/or modify it +                under the terms of the GNU General Public License as published by the Free +                Software Foundation, either version 3 of the License, or (at your option) +                any later version.</p> + +                <p>This template is distributed in the hope that it will be useful, but +                WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +                or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +                more details.</p> + +                <p>You should have received a copy of the GNU General Public License along +                with Template.  If not, see <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.</p> +        </body>  | 
