.. _script: Python Scripts ============== General Idea ------------ You have seen the typical steps in an analysis: reading the data, manipulating arrays, fitting and plotting. In order that you do not have to always type in everything you can type all the commands into a simple text file using your favored editor, save it with the extension ``.py`` and then execute it with the command ``run`` or ``%run``. In general all that you can type into `ipython`_ at the prompt, can also be stored in a file. This file is called a ``script`` or, more precise, ``a python script``. It is basically a program. A simple script for a few things you did in this short introduction looks like:: # import the toolbox and call it B import LT.box as B # read the data mf = B.get_file('my_exp_1.data') # get the data into arrays t = mf['time'] dexp = mf['dist'] derr = mf['d_err'] # print the values in a for loop for i, D in enumerate(dexp): # indentation is important print( 'time = ', t[i], 'distance = ', D, 'error = ', derr[i] ) # end of the loop = end of indentation # plot the data B.plot_exp(t, dexp, derr) # fit a line fit = B.linefit(t, dexp, derr) # draw the fit result B.plot_line(fit.xpl, fit.ypl) # add the labels B.pl.xlabel('t (sec)') B.pl.ylabel('Distance (m)') B.pl.title('Distance vs time exp.') # save the plot B.pl.savefig('my_plot.pdf') # print the covariance matrix: print( "The Covariance Matrix is : ", fit.cov ) You would run it by doing .. sourcecode:: ipython In [119]: run analysis.py If the plot does not show after a short while you need to enter .. sourcecode:: ipython In [120]: run analysis.py In [121]: B.pl.show(). You could for example place the entire analysis of an experiment in one python script. If you need to change something all you have to do in that case is change the corresponding part and run it again. You can find a few examples in the file: :download:`examples.tar.gz`. Problems you might encounter ---------------------------- It is important to realize that when you run a script, what happens inside the script is it's own python session. So if your script is as follows: .. sourcecode:: ipython x = array( [1.,2.,3.,4] ) print( x ) save it as ``try.py`` and then you do .. sourcecode:: ipython In [122]: run try.py you will get .. sourcecode:: ipython In [122]: run try.py --------------------------------------------------------------------------- NameError Traceback (most recent call last) /Users/boeglinw/Documents/teaching/Classes/phy-3106L/python/sphinx/pyplots/try.py in () ----> 1 2 3 x = array([1,2,3,4,5]) 4 print( x ) 5 NameError: name 'array' is not defined WARNING: Failure executing file: This means that python does not know what an ``array`` is. This is part of `numpy`_ and therefore you must ``import`` it (see :ref:`loading modules `). So your script should look like: .. sourcecode:: ipython import numpy as np # import numpy and call is np x = np.array( [1.,2.,3.,4] ) # use the array object of np print( x ) Then the output will be .. sourcecode:: ipython In [123]: run try.py [1 2 3 4 5] If you want to be able to use the functions as in the interactive sessions you need to import things as follows: .. sourcecode:: ipython from matplotlib.pylab import * This is however not recommended. You should know from which software package a function comes in order to know exactly what it is doing and how to use it. I therefore recommend to do the following .. sourcecode:: ipython import numpy as np # for math (all names start with np.) import matplotlib.pyplot as pl # for plotting (all plot # functions start with pl. If you use trigonometric and other functions remember they often act on whole arrays, each element at a time, so you need to use the numpy functions e.g. ``np.sin``, ``np.cos``, ``np.arctan``, ``np.log`` etc. Check the `numpy`_ documentation for all the details .. include:: include/links.rst