[Tutor] Shading Between Curves with Different Colour Over Specified X value Range

2015-07-27 Thread Colin Ross
*Goal:* Shade between I_2 (curve 1) and I_3 (curve 2) with following
conditions:
  - Green for 0 < x < 4
  - Red for 4 < x < 12

*Code: *

*Note: Code currently only attempting to shade green for 0 < x < 4 *

import numpy as np
import pylab
from pylab import *
import matplotlib.pyplot as plt
import csv


# Load data from .txt file

with open('current_mirror_output_swing.csv', 'rb') as f:
   reader = csv.reader(f)
   your_list = list(reader)

data = np.asarray(your_list)

I_ref = np.asarray(data[1:,0])
I_1 = data[1:,1]
I_2 = data[1:,2]
I_3 = data[1:,3]

# Create an array of x values to fill b/w curves with a certain color.

X1 = np.linspace(0.,4.,len(I_3))

I_ref = I_ref.astype(float)*1000.
I_1 = I_1.astype(float)*1000.
I_2 = I_2.astype(float)*1000.
I_3 = I_3.astype(float)*1000.


# Plotting commands.

plot(I_ref, I_2, 'r-')
plot(I_ref, I_3, 'b-')
title('Current Mirror Output Swing')
xlabel('$I_{ref}$ (mA)')
ylabel('I (mA)')

plt.fill_between(X1, I_2, I_3, color = 'g', alpha = '0.5')
plt.legend(['$I_{ref}$', '$I_{out}$'], loc='upper left')
plt.grid()

show()

*Issue: *

See attached figure.

Thank you.
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Shading Between Curves with Different Colour Over Specified X value Range

2015-07-28 Thread Colin Ross
On Mon, Jul 27, 2015 at 5:01 PM, Mark Lawrence 
wrote:

> On 27/07/2015 19:47, Colin Ross wrote:
>
>> *Goal:* Shade between I_2 (curve 1) and I_3 (curve 2) with following
>> conditions:
>>- Green for 0 < x < 4
>>- Red for 4 < x < 12
>>
>> *Code: *
>>
>> *Note: Code currently only attempting to shade green for 0 < x < 4 *
>>
>>
>> import numpy as np
>> import pylab
>> from pylab import *
>> import matplotlib.pyplot as plt
>> import csv
>>
>>
>> # Load data from .txt file
>>
>> with open('current_mirror_output_swing.csv', 'rb') as f:
>> reader = csv.reader(f)
>> your_list = list(reader)
>>
>> data = np.asarray(your_list)
>>
>> I_ref = np.asarray(data[1:,0])
>> I_1 = data[1:,1]
>> I_2 = data[1:,2]
>> I_3 = data[1:,3]
>>
>> # Create an array of x values to fill b/w curves with a certain color.
>>
>> X1 = np.linspace(0.,4.,len(I_3))
>>
>> I_ref = I_ref.astype(float)*1000.
>> I_1 = I_1.astype(float)*1000.
>> I_2 = I_2.astype(float)*1000.
>> I_3 = I_3.astype(float)*1000.
>>
>>
>> # Plotting commands.
>>
>> plot(I_ref, I_2, 'r-')
>> plot(I_ref, I_3, 'b-')
>> title('Current Mirror Output Swing')
>> xlabel('$I_{ref}$ (mA)')
>> ylabel('I (mA)')
>>
>> plt.fill_between(X1, I_2, I_3, color = 'g', alpha = '0.5')
>> plt.legend(['$I_{ref}$', '$I_{out}$'], loc='upper left')
>> plt.grid()
>>
>> show()
>>
>> *Issue: *
>>
>> See attached figure.
>>
>> Thank you.
>>
>
> There is no attachment to see, sorry :(
>

My apologies. SHould be there now!


>
> One thing to note about the following lines.
>
> from pylab import *
> import matplotlib.pyplot as plt
>
> The first was designed to make matplotlib easy to use interactively,
> especially in iPython, the second in a script.  IIRC the former is
> deprecated so I suggest you stick with the latter.


Great, thank you!


>
>
> --
> My fellow Pythonistas, ask not what our language can do for you, ask
> what you can do for our language.
>
> Mark Lawrence
>
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Shading Between Curves with Different Colour Over Specified X value Range

2015-07-28 Thread Colin Ross
On Tue, Jul 28, 2015 at 6:13 AM, Alan Gauld 
wrote:

> On 28/07/15 01:00, Colin Ross wrote:
>
>  *Issue: *
>>>>
>>>> See attached figure.
>>>>
>>>> Thank you.
>>>>
>>>>
>>> There is no attachment to see, sorry :(
>>>
>>>
>> My apologies. SHould be there now!
>>
>
> The problem is a lot of mailing list servers (and even some
> corporate mail servers) strip off attachments. In this case
> I still can't see one so something between you and me is
> stripping it. It may even be that some people will see it
> and others don't.
>
> For that reason it's usually better if you have access to
> some web space to post the image there and provide a URL.
> Or at least provide a textual description for those who
> can't see the image.
>
> hth
> --
> Alan G
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/
> http://www.amazon.com/author/alan_gauld
> Follow my photo-blog on Flickr at:
> http://www.flickr.com/photos/alangauldphotos
>
>
>
It appears to be taking the entire area between the two curves and
compressing it between the specified x values. When I specify the entire x
range, the shaded area fits between the two curves perfectly. However, when
I specify a smaller range of x values, the shape of the area between the
two curves appears to be elongated vertically as though it is trying to
squeeze the total area into the smaller x range (i.e. it does not follow
the upper and lower limits anymore). I hope this makes sense, I will try
and post a URL...



>
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Shading Between Curves with Different Colour Over Specified X value Range

2015-07-29 Thread Colin Ross
On Tue, Jul 28, 2015 at 11:03 AM, Oscar Benjamin  wrote:

> On Mon, 27 Jul 2015 at 20:53 Colin Ross  wrote:
>
>> *Goal:* Shade between I_2 (curve 1) and I_3 (curve 2) with following
>> conditions:
>>   - Green for 0 < x < 4
>>   - Red for 4 < x < 12
>>
>> *Code: *
>>
>> *Note: Code currently only attempting to shade green for 0 < x < 4 *
>>
>> import numpy as np
>> import pylab
>> from pylab import *
>> import matplotlib.pyplot as plt
>> import csv
>>
>>
>> # Load data from .txt file
>>
>> with open('current_mirror_output_swing.csv', 'rb') as f:
>>reader = csv.reader(f)
>>your_list = list(reader)
>>
>> data = np.asarray(your_list)
>>
>> I_ref = np.asarray(data[1:,0])
>> I_1 = data[1:,1]
>> I_2 = data[1:,2]
>> I_3 = data[1:,3]
>>
>> # Create an array of x values to fill b/w curves with a certain color.
>>
>>
> Here you specify the X values for the fill shape as going from 0 to 4:
>
>
>> X1 = np.linspace(0.,4.,len(I_3))
>>
>> I_ref = I_ref.astype(float)*1000.
>> I_1 = I_1.astype(float)*1000.
>> I_2 = I_2.astype(float)*1000.
>> I_3 = I_3.astype(float)*1000.
>>
>>
>> # Plotting commands.
>>
>>
> Here you specify the X values for the line plots as being whatever I_ref
> is (I don't know what it is since I can't see your csv file):
>
>
>> plot(I_ref, I_2, 'r-')
>> plot(I_ref, I_3, 'b-')
>> title('Current Mirror Output Swing')
>> xlabel('$I_{ref}$ (mA)')
>> ylabel('I (mA)')
>>
>>
> Try changing this line:
>
>
>> plt.fill_between(X1, I_2, I_3, color = 'g', alpha = '0.5')
>>
>
> to:
>
> plt.fill_between(I_ref, I_2, I_3, color = 'g', alpha = '0.5')
>
> and then the filled area should have the same X range as the lines.
>
> --
> Oscar
>

Thanks! This works now.
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Arrow of constant size on log plot

2015-07-29 Thread Colin Ross
I am attempting to draw an arrow that begins at a specified point on a
logarithmic plot and then extends a certain distance in the -Y direction.
This part is fine, however I would like to draw multiple arrows with the
same size corresponding to different points on a plot. If I specify a
certain value (as shown in the example below), the arrow size will change
depending on where the point is on the plot, since the X and Y axis are
logarithmic.

-

import numpy as np

import pylab as pl

x_1 = np.arange(10)

y_1 = np.arange(10)

x_1_avg = np.sum(x_1)/len(x_1)

y_1_avg = np.sum(y_1)/len(y_1)

x_2 = 3.

y_2 = 3.

pl.plot(x_1,y_1,'k')

pl.arrow(x_1_avg,y_1_avg , 0.0, -0.5, fc='b', ec='b', head_width=0.1,
head_length=0.1)

pl.arrow(x_2,y_2, 0.0, -0.5, fc='r', ec='r', head_width=0.1, head_length=0.1
)

pl.yscale('log')

pl.xscale('log')

pl.show()

-


Any advice is appreciated.
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Plotting asymmetric error bars for a single point in matplotlib

2015-08-04 Thread Colin Ross
Hi all,

Goal: To plot asymmetric x error bars for a single point using errorbar. I
am interested in displaying the inter quartile range (IQR) for a data set.

Code:

import numpy as np
import matplotlib.pyplot as plt

y = 1.0
data = np.random.rand(100)

median = np.median(data)
upper_quartile = np.percentile(data, 75)
lower_quartile = np.percentile(data, 25)
IQR = upper_quartile - lower_quartile

plt.errorbar(median, y, xerr=[lower_quartile ,upper_quartile], fmt='k--')

plt.savefig('IQR.eps')
plt.show()

Error:

Traceback (most recent call last):
  File "IQR.py", line 15, in 
plt.errorbar(median, y, xerr=[0.5,0.75], fmt='k--')
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2251, in
errorbar
ret = ax.errorbar(x, y, yerr, xerr, fmt, ecolor, elinewidth, capsize,
barsabove, lolims, uplims, xlolims, xuplims, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 5327, in
errorbar
in cbook.safezip(x,xerr)]
  File "/usr/lib/pymodules/python2.7/matplotlib/cbook.py", line 1294, in
safezip
raise ValueError(_safezip_msg % (Nx, i+1, len(arg)))
ValueError: In safezip, len(args[0])=1 but len(args[1])=2

My understanding is that safezip zips together the x array with the
specified upper and lower x limits?

Thanks.

Colin
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] how to define constant width errorbars on log-log plot

2015-08-06 Thread Colin Ross
Does anyone have an example code that shows how to plot errorbars with a 
constant line width for a dataset on a log log plot? Thank you.
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Extracting bits from an array

2016-04-29 Thread Colin Ross
Hello,

I have an array that takes on the following form:

x = [1000,1001,1011,]

The array elements are meant to be binary representation of integers.

Goal: Access array elements and extract the first two bits.

e.g. Final result would look something like this:

x_new = [10,10,10,11]

What I have tried:

data_indices = range(4)  #  Set up array of values to loop over

for idx in data_indices:
 f = x[idx]  # Index into array of x values
 f_idx = f[:2]  # Extract first two elements
 print f_idx

I then receive the following error:

IndexError: invalid index to scalar variable.

Any help with accomplishing my outline dgoal would be greatly appreciated.

Thank you.

Colin
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Extracting bits from an array

2016-04-29 Thread Colin Ross
Thank you Michael, this is exactly what I was looking for! Clears things up
on multiple fronts : )

On Fri, Apr 29, 2016 at 2:29 PM, Michael Selik 
wrote:

>
>
> > On Apr 29, 2016, at 1:15 PM, Colin Ross 
> wrote:
> >
> > Hello,
> >
> > I have an array that takes on the following form:
> >
> > x = [1000,1001,1011,]
> >
> > The array elements are meant to be binary representation of integers.
> >
> > Goal: Access array elements and extract the first two bits.
> >
> > e.g. Final result would look something like this:
> >
> > x_new = [10,10,10,11]
> >
> > What I have tried:
> >
> > data_indices = range(4)  #  Set up array of values to loop over
> >
> > for idx in data_indices:
> > f = x[idx]  # Index into array of x values
>
> Instead of looping over a range of indices, you should loop over the data
> itself.
>
> for number in x:
> s = bin(number)
> print s
>
> > f_idx = f[:2]  # Extract first two elements
>
> You couldn't slice an integer. First convert to the binary representation
> in string form. You can strip off the prefix if you just want the digits.
>
> s = bin(number).lstrip('0b')
>
> Then you can slice off the first two digits if you want. Remember, it's a
> str of digits, not a number.
>
> > print f_idx
> >
> > I then receive the following error:
> >
> > IndexError: invalid index to scalar variable.
> >
> > Any help with accomplishing my outline dgoal would be greatly
> appreciated.
> >
> > Thank you.
> >
> > Colin
> > ___
> > Tutor maillist  -  Tutor@python.org
> > To unsubscribe or change subscription options:
> > https://mail.python.org/mailman/listinfo/tutor
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Reading in large .dat file

2016-06-29 Thread Colin Ross
Good afternoon,

I have a .dat file that is 214 rows by 65 columns that I would like to read
into python and plot the 1st column versus all other columns.

My code:

#

import numpy as np
import scipy
import pylab as pl
import matplotlib
from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
import sys

# Load in text from .dat file

sed = np.loadtxt('spectra.dat', unpack = True)

# Access column data

col1 = sed[0]
col2 = sed[1]
col3 = sed[2]
col4 = sed[3]
col5 = sed[4]

wavelength = col1
flux_1 = col2
flux_2 = col3
flux_3 = col4
flux_4 = col5

pl.plot(wavelength,flux_1)
pl.plot(wavelength,flux_2)
pl.plot(wavelength,flux_3)
pl.plot(wavelength,flux_4)

pl.xscale('log')

pl.show()

#

This is fine if I want to write out a separate line for each of the 65
columns, but I would like to simplify the code by looping over the data.
Can someone please help me formatting the loop correctly?

Thank you.

Colin
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Reading in large .dat file

2016-06-29 Thread Colin Ross
On Wed, Jun 29, 2016 at 2:41 PM, Peter Otten <__pete...@web.de> wrote:

> Colin Ross wrote:
>
> > Good afternoon,
> >
> > I have a .dat file that is 214 rows by 65 columns that I would like to
> > read into python and plot the 1st column versus all other columns.
> >
> > My code:
> >
> > #
> >
> > import numpy as np
> > import scipy
> > import pylab as pl
> > import matplotlib
> > from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
> > import sys
> >
> > # Load in text from .dat file
> >
> > sed = np.loadtxt('spectra.dat', unpack = True)
>
> for flux in sed:
> pl.plot(wavelength, flux)
>
> > pl.xscale('log')
> >
> > pl.show()
> >
> > #
> >
> > This is fine if I want to write out a separate line for each of the 65
> > columns, but I would like to simplify the code by looping over the data.
> > Can someone please help me formatting the loop correctly?
>

Thank you for the fast response! I have tried this and it outputs the
attached image. It seems to only plot 1 curve, when I would have expected
64?



>
> To understand why the above works (assuming it does) consider that for many
> data types
>
> for item in data:
> ... # use item
>
> is equivalent to
>
> for index in range(len(data)):
> item = data[index]
> ... # use item
>
> Unrolling the above for len(data) == 3 gives:
>
> item = data[0]
> ... # use first item
> item = data[1]
> ... # use second item
> item = data[2]
> ... # use third item
>
>
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Reading in large .dat file

2016-06-29 Thread Colin Ross
On Wed, Jun 29, 2016 at 4:21 PM, Peter Otten <__pete...@web.de> wrote:

> Colin Ross wrote:
>
> > On Wed, Jun 29, 2016 at 2:41 PM, Peter Otten <__pete...@web.de> wrote:
> >
> >> Colin Ross wrote:
> >>
> >> > Good afternoon,
> >> >
> >> > I have a .dat file that is 214 rows by 65 columns that I would like to
> >> > read into python and plot the 1st column versus all other columns.
> >> >
> >> > My code:
> >> >
> >> >
> #
> >> >
> >> > import numpy as np
> >> > import scipy
> >> > import pylab as pl
> >> > import matplotlib
> >> > from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
> >> > import sys
> >> >
> >> > # Load in text from .dat file
> >> >
> >> > sed = np.loadtxt('spectra.dat', unpack = True)
> >>
> >> for flux in sed:
> >> pl.plot(wavelength, flux)
> >>
> >> > pl.xscale('log')
> >> >
> >> > pl.show()
> >> >
> >> >
> #
> >> >
> >> > This is fine if I want to write out a separate line for each of the 65
> >> > columns, but I would like to simplify the code by looping over the
> >> > data. Can someone please help me formatting the loop correctly?
> >>
> >
> > Thank you for the fast response! I have tried this and it outputs the
> > attached image.
>
> This is a text-only mailing list, so the image didn't make it through.
>
> > It seems to only plot 1 curve, when I would have expected
> > 64?
>
> You probably got a traceback (error information on the commandline). It is
> always a good idea to include that. Example:
>
> $ python3 flux2.py
> Traceback (most recent call last):
>   File "flux2.py", line 15, in 
> pl.plot(wavelength,flux)
> NameError: name 'wavelength' is not defined
>
> The error indicates that there is no variable called wavelength. That's
> because I didn't note that you use the first column to define that, sorry.
> Here's a modified script that should work:
>
> import numpy as np
> import pylab as pl
>
> sed = np.loadtxt('spectra.dat', unpack=True)
>
> wavelength = sed[0]
> for flux in sed[1:]:
> pl.plot(wavelength, flux)
>
> pl.xscale('log')
> pl.show()
>
> The for loop now skips the first column.
>

Ah yes, this works perfect now. I had added the wavelength = sed[0], but
forgot to skip it in the loop!

Thank you!


>
>
> ___
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Error message received when running “from scipy import interpolate”

2014-06-05 Thread Colin Ross
I am attempting to run the following in python:

from scipy import interpolate

I receive this error message:

Traceback (most recent call last):
  File "", line 1, in 
  File 
"/Library/Python/2.7/site-packages/scipy-0.11.0.dev_0496569_20111005-py2.7-macosx-10.7-x86_64.egg/scipy/interpolate/__init__.py",
line 156, in 
from ndgriddata import *
  File 
"/Library/Python/2.7/site-packages/scipy-0.11.0.dev_0496569_20111005-py2.7-macosx-10.7-x86_64.egg/scipy/interpolate/ndgriddata.py",
line 9, in 
from interpnd import LinearNDInterpolator, NDInterpolatorBase, \
  File "numpy.pxd", line 172, in init interpnd
(scipy/interpolate/interpnd.c:7696)ValueError: numpy.ndarray has the
wrong size, try recompiling

I am currently running Mac OS X Lion 10.7.5 and Python 2.7.1. with MacPorts
installed.

I am attempting to run the code on a different computer than it was created
on. After doing some reading my understanding is that this error may be a
result of the ABI not being forward compatible. To try and solve the issue
I updated my MacPorts and then ran ($ sudo port upgrade outdated) to
upgrade the installed ports. However, the same error continues to appear
when I try and run the code.
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Plotting subsets of data

2014-12-08 Thread Colin Ross
Good afternoon,

I am using the following to code to plot the output from an optical encoder:

import numpy as np
from numpy import ma, logical_or
import pylab
from pylab import *
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator
import sys

# Defining x and y minorlocator

xminorLocator=AutoMinorLocator()
yminorLocator=AutoMinorLocator()

# Load data from .txt file

data = np.loadtxt('2014_12_04-16_30_03.txt',skiprows = 0 ,usecols = (0,1))

print "\n Chopper Test for X-SPEC Prototype"
print "\n  Time (sec) Pos (deg)"
print data

# Place column data in array to be plotted

time = np.array(data[:,0])
print "Time (sec):"
#print time

pos = np.array(data[:,1])
print "Position (deg):"
print pos

# Setting minor ticks

ax = plt.subplot(111)
ax.xaxis.set_minor_locator(xminorLocator)
ax.yaxis.set_minor_locator(yminorLocator)

#Plotting commands.

subplot(2,1,1)
plot(time, pos, 'ro')
title('Encoder Output')
ylabel('Pos (deg)')

subplot(2,1,2)
plot(t_small, pos, 'ro')
xlabel('Time (sec)')
ylabel('Pos (deg)')

show()

The desired result is a square wave, but this is not readily available from
the plot (see attached). For the subplot(2,1,2) I would like to plot the
output over a 5 second interval so that the behaviour becomes more evident.
Can someone please advise me as to the easiest way isolate the first 5
seconds of data?

Thank you.
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Plotting subsets of data

2014-12-08 Thread Colin Ross
Perfect, thank you Danny!

On Mon, Dec 8, 2014 at 3:49 PM, Danny Yoo  wrote:

> On Mon, Dec 8, 2014 at 7:48 AM, Colin Ross 
> wrote:
> > Good afternoon,
> >
> > I am using the following to code to plot the output from an optical
> encoder:
>
> Hi Colin,
>
> Matplotlib is a third-party library, so you may also consider asking
> the matplotlib folks.
>
> From a brief look at:
>
>
> http://matplotlib.org/1.4.2/users/pyplot_tutorial.html#working-with-multiple-figures-and-axes
>
> it appears that you can override the default axis, and specify xmin,
> ymin, xmax, and ymax values.
>
> http://matplotlib.org/1.4.2/api/pyplot_api.html#matplotlib.pyplot.axis
>
> For your particular case, you may want to just limit your x axis, in
> which case xlim() might be appropriate.
>
> http://matplotlib.org/1.4.2/api/pyplot_api.html#matplotlib.pyplot.xlim
>
>
> If all else fails, just filter your data before submitting it to the
> grapher.  The program loads data here, using loadtxt
> (http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html):
>
> data = np.loadtxt('2014_12_04-16_30_03.txt',skiprows = 0 ,usecols =
> (0,1))
>
> and it's just a numpy array: you can manipulate numpy arrays.   See:
>
>
> http://stackoverflow.com/questions/26154711/filter-rows-of-a-numpy-array
>
> as an example of an approach.
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] selecting data from a list

2015-01-17 Thread Colin Ross
Hi all,

I am attempting to isolate a certain subset of data from the list "a" and
then turn it into any array. To do so, I have written the following code:

import numpy as np

a = [0,1,2,3,4,5,6,7,8,9,10]
b = [10,20,30,40,50,60,70,80,90,100,110]

for a in range(len(a)):
if a > 5:
print a

a_1 = np.array(a)

print a_1

The output is as follows:

6
7
8
9
10
10


As you can see, when I attempt to turn the list of numbers 6 through 10
into an array I am left with it only printing out 10...

The desired result is: [6,7,8,9,10}

Any guidance would be greatly appreciated.

Thank you.

Colin
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Fitting data to error function

2015-03-13 Thread Colin Ross
Hi all,

I am attempting to optimize the parameters I_0 and w_0 in the function
(func(x,I_0,w_0) shown below) to fit a set of data. However when I run this
code I recieve the error shown below. Any suggestions would be greatly
appreciated.

Code:

import numpy as np

import math

from math import *

# data

xdata = np.array([0.1,1.0,2.0,3.0,4.0,5.0])

ydata = np.array([0.1,0.9,2.2,2.8,3.9,5.1])

# Initial guess.

x0 = np.array([0.0, 0.0])


# Data errors:

sigma = np.array([1.0,1.0,1.0,1.0,1.0,1.0])

# Error function

def func(x,a,b):

return ((a)/2.)*(math.erfc((np.sqrt(2.)*x*1.E-3)/b))


# Optimization

import scipy.optimize as optimization

print optimization.curve_fit(func, xdata, ydata, x0, sigma)

The error I am recieving is as follows:

TypeError: only length-1 arrays can be converted to Python scalars
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Fitting data to error function

2015-03-15 Thread Colin Ross
Hi Danny,

Thanks for the help! As you mentioned, using scipy.special.erfc was a much
better idea. Below is a copy of my program and the stack trace, showing a
new error. It seems that the first auto correlation works,  however the
second fails.

###

# Autocorrelation program

###


import numpy as np

from numpy import ma, logical_or

import pylab

from pylab import *

import matplotlib.pyplot as plt

from matplotlib.ticker import AutoMinorLocator

import math

from math import exp

import scipy

from scipy.integrate import quad,fixed_quad

import sys

from scipy.optimize import curve_fit

from scipy.fftpack import fft, ifft, fftfreq


##

#fitting function (gaussian)

##


def fit(x,a,b,c):

return a*np.exp(-(x-b)**2/c)

#(1.0/(np.sqrt(2*np.pi)*sigma))*np.exp(-(x-mu)**2 / (2*sigma**2))


##

# Load data from .txt file

##


data1 = np.loadtxt('TL_pulseC.txt',skiprows = 2 ,usecols = (0,1))


data2 = np.loadtxt('cos_pulseC.txt',skiprows = 2 ,usecols = (0,1))


#print "\n  Stage Position (um) Amplitude (V)"

#print data




# Create data arrays




pos = np.array(data1[:,0])   # micrometers


pos_m = pos*1.0*10**(-6) # meters


print pos_m


amp = np.array(data1[:,1])   # V


amp_auto = np.array(data2[:,1])




#

# Finding the index of the maximum amplitude where the pulse delay is zero.
Then calculating the

# mean to shift the curve accordingly.

#


peak_id = np.where(amp == np.max(amp))[0][0]

mean = pos_m[peak_id]

print mean


dif = pos_m - mean


t_d =(2.*dif)/(2.99*10**8)*10**(12.) # ps


print t_d


t = np.arange(0.,0.5,1/float(2*len(t_d)))# picoseconds (ps)




# Define constants




c = 2.99*10**8  # m/s

alpha = np.pi   # rad

gamma = 200.0*10**(-15.)

lamb_o = 1160.00*10**(-9.)  # m

omega_o = ((2.*np.pi*c)/lamb_o)*1.*10**(-12.)   # ps^-1

delta = np.pi/2.# rad

FWHM = 32.53*10**(-6)   # m

t_p = ((FWHM)/c)*10**(12.)  # ps


print t_p


E_norm = 1.   # normalized




# Define functions






# Electric field




def E_o(x):

return E_norm*(cosh(1.76*x/t_p))**(-1.)


# Real part of electric field


def E_rin(x):

return (1./2.)*E_o(x)*cos(omega_o*x)


# Imaginary part of electric field


def E_iin(x):

return (1./2.)*E_o(x)*sin(omega_o*x)


# Total electric field


def E_(x):

return (1./2.)*E_o(x)*np.exp(-1j*omega_o*x)




# Autocorrelation




'''

def integrand(t,t_d):

return abs(E_rin(t))**2.*abs(E_rin(t - t_d))**2.

'''


def integrand(x,y):

return abs(E_(x))**2.*abs(E_(x - y))**2.



#integrand = abs(E_(t))**2.*abs(E_(t - t_d))**2.


def G(y):

return quad(integrand, -np.infty, np.infty, args=(y))



G_plot = []


for tau in t_d:

integral,error = G(tau)

G_plot.append(integral)


#fit data

params = curve_fit(fit,pos[174-100:174+100],amp[174-100:174+100],p0=[0.003,
8550,350]) #function, xdata, ydata, initial guess (from plot)

#parameters

[a,b,d] = params[0]

#error

[da,db,dd] = np.sqrt(np.diag(params[1]))


#

# Shaped electric field

#


alpha = np.pi

delta = np.pi/2.

gamma = 200.*10**(-15)   # sec


dt = (t[1]-t[0])*(1*10**(-12))


def phi(x):

return alpha*np.cos(gamma*(x - omega_o) - delta)


def M(x):

return np.exp(1j*phi(x))


def E_out(x):

E_in_w = fft(E_(x))

omega = fftfreq(len(x),dt)*2*np.pi

E_out_w = E_in_w*M(omega)

return ifft(E_out_w)


#

# Second autocorrelation

#


def integrand1(x,y):

return abs(E_out(x))**2.*abs(E_out(x - y))**2.


def G1(y):

return quad(integrand1, -np.infty, np.infty, args=(y))


G_plot_1 = []


for tau in t_d:

integral,error = G1(tau)

G_plot_1.append(integral)


#

# Plotting data

#



# Defining x and y minorlocator



xminorLocator = AutoMinorLocator()

yminorLocator = AutoMinorLocator()



# Setting minor ticks


ax = plt.subplot(111)

ax.xaxis.set_minor_locator(xminorLocator)

ax.yaxis.set_minor_locator(yminorLocator)

sample_pos = np.linspace(min(pos),max(pos),1000)

equation_la

Re: [Tutor] Fitting data to error function

2015-03-16 Thread Colin Ross
HI Danny,

Here is a simplified version:



import numpy as np

import pylab

from pylab import *

import matplotlib.pyplot as plt

import scipy

from scipy.integrate import quad

from scipy.fftpack import fft, ifft, fftfreq

##

# Load data from .txt file

##

data1 = np.loadtxt('TL_pulseC.txt',skiprows = 2 ,usecols = (0,1))

data2 = np.loadtxt('cos_pulseC.txt',skiprows = 2 ,usecols = (0,1))



# Create data arrays



pos = np.array(data1[:,0])# micrometers

pos_m = pos*1.0*10**(-6)# meters

amp = np.array(data1[:,1])   # V

amp_auto = np.array(data2[:,1])  # V

#

# Finding the index of the maximum amplitude where the pulse delay is zero.

# Then calculating the mean to shift the curve accordingly.

#

peak_id = np.where(amp == np.max(amp))[0][0]

mean = pos_m[peak_id]

dif = pos_m - mean

t_d =(2.*dif)/(2.99*10**8)*10**(12.) # picoseconds (ps)


t = np.arange(-0.5,0.5,0.0001)# picoseconds (ps)



# Define constants



c = 2.99*10**8  # m/s

alpha = np.pi # rad

gamma = 200.0*10**(-15.)

lamb_o = 1160.00*10**(-9.)  # m

omega_o = ((2.*np.pi*c)/lamb_o)*1.*10**(-12.)# ps^-1

delta = np.pi/2. # rad

FWHM = 32.53*10**(-6)   # m

t_p = ((FWHM)/c)*10**(12.)  # ps


E_norm = 1. #
normalized

#

# Define functions

#




# Input electric field



def E_o(x):

return E_norm*(cosh(1.76*x/t_p))**(-1.)

def E_(x):

return (1./2.)*E_o(x)*np.exp(-1j*omega_o*x)

#

# Shaped electric field

#

alpha = np.pi

delta = np.pi/2.

gamma = 200.*10**(-15)   # sec

dt = (t[1]-t[0])*(1*10**(-12))   # sec

def phi(x):

return alpha*np.cos(gamma*(x - omega_o) - delta)

def M(x):

return np.exp(1j*phi(x))

##

# Write E(w) as E(t) using FFT

##

def E_out(x):

E_in_w = fft(E_(x))

omega = fftfreq(len(x),dt)*2*np.pi

E_out_w = E_in_w*M(omega)

return ifft(E_out_w)

def integrand(x,y):

return abs(E_out(x))**2.*abs(E_(x - y))**2.

def G(y):

return quad(integrand, -np.infty, np.infty, args=(y))

auto_corr = []

for tau in t_d:

integral,error = G(tau)

auto_corr.append(integral)

# Plotting

plt.plot(t_d,auto_corr)

plt.show()


-

---

IndexErrorTraceback (most recent call last)

/Users/colinross/Documents/Optics/Programming/five.py in ()

107

108 for tau in t_d:

--> 109 integral,error = G(tau)

110 auto_corr.append(integral)

111


/Users/colinross/Documents/Optics/Programming/five.py in G(y)

102

103 def G(y):

--> 104 return quad(integrand, -np.infty, np.infty, args=(y))

105

106 auto_corr = []


/Users/colinross/anaconda/lib/python2.7/site-packages/scipy/integrate/quadpack.pyc
in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points,
weight, wvar, wopts, maxp1, limlst)

279 args = (args,)

280 if (weight is None):

--> 281 retval =
_quad(func,a,b,args,full_output,epsabs,epsrel,limit,points)

282 else:

283 retval =
_quad_weight(func,a,b,args,full_output,epsabs,epsrel,limlst,limit,maxp1,weight,wvar,wopts)


/Users/colinross/anaconda/lib/python2.7/site-packages/scipy/integrate/quadpack.pyc
in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points)

345 return
_quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)

346 else:

--> 347 return
_quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)

348 else:

349 if infbounds != 0:


/Users/colinross/Documents/Optics/Programming/five.py in integrand(x, y)

 99

100 def integrand(x,y):

--> 101 return abs(E_out(x))**2.*abs(E_(x - y))**2.

102

103 def G(y):


/Users/colinross/Documents/Optics/Programming/five.py in E_out(x)

 93

 94 def E_out(x):

---> 95  

Re: [Tutor] Fitting data to error function

2015-03-16 Thread Colin Ross
What I am trying to do is calculate the non-colinear autocorrelation:

G(t_d) = \int_{-\infty}^{+\infty} |E(t)|^2 * |E(t - t_d)|^2 dt

So I need to loop through an array of t_d values (len = 376) and calculate
G(t_d) for as many t values as possible to eliminate sampling issues.

Colin

On Mon, Mar 16, 2015 at 6:50 PM, Colin Ross 
wrote:

> HI Danny,
>
> Here is a simplified version:
>
> 
>
> import numpy as np
>
> import pylab
>
> from pylab import *
>
> import matplotlib.pyplot as plt
>
> import scipy
>
> from scipy.integrate import quad
>
> from scipy.fftpack import fft, ifft, fftfreq
>
> ##
>
> # Load data from .txt file
>
> ##
>
> data1 = np.loadtxt('TL_pulseC.txt',skiprows = 2 ,usecols = (0,1))
>
> data2 = np.loadtxt('cos_pulseC.txt',skiprows = 2 ,usecols = (0,1))
>
> 
>
> # Create data arrays
>
> 
>
> pos = np.array(data1[:,0])# micrometers
>
> pos_m = pos*1.0*10**(-6)# meters
>
> amp = np.array(data1[:,1])   # V
>
> amp_auto = np.array(data2[:,1])  # V
>
> #
>
> # Finding the index of the maximum amplitude where the pulse delay is zero.
>
> # Then calculating the mean to shift the curve accordingly.
>
> #
>
> peak_id = np.where(amp == np.max(amp))[0][0]
>
> mean = pos_m[peak_id]
>
> dif = pos_m - mean
>
> t_d =(2.*dif)/(2.99*10**8)*10**(12.) # picoseconds (ps)
>
>
> t = np.arange(-0.5,0.5,0.0001)# picoseconds (ps)
>
> 
>
> # Define constants
>
> 
>
> c = 2.99*10**8  # m/s
>
> alpha = np.pi #
> rad
>
> gamma = 200.0*10**(-15.)
>
> lamb_o = 1160.00*10**(-9.)  # m
>
> omega_o = ((2.*np.pi*c)/lamb_o)*1.*10**(-12.)# ps^-1
>
> delta = np.pi/2. # rad
>
> FWHM = 32.53*10**(-6)   # m
>
> t_p = ((FWHM)/c)*10**(12.)  # ps
>
>
> E_norm = 1. #
> normalized
>
> #
>
> # Define functions
>
> #
>
>
> 
>
> # Input electric field
>
> 
>
> def E_o(x):
>
> return E_norm*(cosh(1.76*x/t_p))**(-1.)
>
> def E_(x):
>
> return (1./2.)*E_o(x)*np.exp(-1j*omega_o*x)
>
> #
>
> # Shaped electric field
>
> #
>
> alpha = np.pi
>
> delta = np.pi/2.
>
> gamma = 200.*10**(-15)   # sec
>
> dt = (t[1]-t[0])*(1*10**(-12))   # sec
>
> def phi(x):
>
> return alpha*np.cos(gamma*(x - omega_o) - delta)
>
> def M(x):
>
> return np.exp(1j*phi(x))
>
> ##
>
> # Write E(w) as E(t) using FFT
>
> ##
>
> def E_out(x):
>
> E_in_w = fft(E_(x))
>
> omega = fftfreq(len(x),dt)*2*np.pi
>
> E_out_w = E_in_w*M(omega)
>
> return ifft(E_out_w)
>
> def integrand(x,y):
>
> return abs(E_out(x))**2.*abs(E_(x - y))**2.
>
> def G(y):
>
> return quad(integrand, -np.infty, np.infty, args=(y))
>
> auto_corr = []
>
> for tau in t_d:
>
> integral,error = G(tau)
>
> auto_corr.append(integral)
>
> # Plotting
>
> plt.plot(t_d,auto_corr)
>
> plt.show()
>
>
> -
>
> ---
>
> IndexErrorTraceback (most recent call last)
>
> /Users/colinross/Documents/Optics/Programming/five.py in ()
>
> 107
>
> 108 for tau in t_d:
>
> --> 109 integral,error = G(tau)
>
> 110 auto_corr.append(integral)
>
> 111
>
>
> /Users/colinross/Documents/Optics/Programming/five.py in G(y)
>
> 102
>
> 103 def G(y):
>
> --> 104 return quad(integrand, -np.infty, np.infty, 

Re: [Tutor] Fitting data to error function

2015-03-16 Thread Colin Ross
Yes, thank you, they were suppose to both be E_out.

And to answer your last question, I do not. Can you please explain?



On Mon, Mar 16, 2015 at 7:19 PM, Danny Yoo  wrote:

> On Mon, Mar 16, 2015 at 2:55 PM, Colin Ross 
> wrote:
> > What I am trying to do is calculate the non-colinear autocorrelation:
> >
> > G(t_d) = \int_{-\infty}^{+\infty} |E(t)|^2 * |E(t - t_d)|^2 dt
> >
> > So I need to loop through an array of t_d values (len = 376) and
> calculate
> > G(t_d) for as many t values as possible to eliminate sampling issues.
>
>
> Ok.  But you're using the term "E(t)" and E(t-t_d)" in your
> LaTeX-ified equation in such a way that it sounds like 'E' is context
> sensitive.
>
> Look at the Python definition of integrand() again:
>
> 100 def integrand(x,y):
> --> 101 return abs(E_out(x))**2.*abs(E_(x - y))**2.
>
>
> and note that there are *two* distinct functions here being used:
>
> E_out
> E_
>
> In contrast, in your mathematics, it looks like these should be the
> *same* E function, so the fact that this is *different* is worth
> consideration.  I have to assume that the mathematics has some context
> sensitivity based on the argument type that you haven't quite
> explained here.
>
>
> Also, I need to ask: do you know what is meant by the term "unit
> test"?  Because this doesn't seem to have been addressed yet, so I
> need to double check.
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] Python serial interface

2015-04-01 Thread Colin Ross
Hi all,

This is a very general question, but I was wondering if anyone has
experience using python to interface with a serial port? If so, can you
please forward any useful resources?

Thanks!

Colin
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Python serial interface

2015-04-01 Thread Colin Ross
Hi Francois,

Thank you for the fast reply! I am looking to control a brushless servo
motor (
http://www.aerotech.com/product-catalog/motors/rotary-motors/bms-series.aspx)
that drives a rotary stage.

Colin

On Wed, Apr 1, 2015 at 11:53 AM, Francois Dion 
wrote:

> Pyserial is python 2.x and 3.x compatible. It is very widely used and is
> stable.
>
> http://pyserial.sourceforge.net/
>
> What is your application? Sometimes you can use a higher level module that
> makes use of pyserial.
>
> Francois
> --
> raspberry-python.blogspot.com - www.pyptug.org - www.3DFutureTech.info -
> @f_dion
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Python serial interface

2015-04-01 Thread Colin Ross
Thank you Francois, this gives me a lot to think about!

I really appreciate your feedback.

Colin

On Wed, Apr 1, 2015 at 12:50 PM, Francois Dion 
wrote:

> On Wed, Apr 1, 2015 at 11:01 AM, Colin Ross 
> wrote:
>
>> Hi Francois,
>>
>> Thank you for the fast reply! I am looking to control a brushless servo
>> motor (
>> http://www.aerotech.com/product-catalog/motors/rotary-motors/bms-series.aspx)
>> that drives a rotary stage.
>>
>
> These motors are not controlled by serial, you'll need a brushless
> controller. In turn the controller might be or not serial, or ip or
> something else altogether (PWM is typical). They do have an rs-422
> connection, but that is for a feedback signal. So you are building a
> feedback control system. If you google that and python you'll find several
> useful references, including a design and analysis module (but not control):
>
> https://pypi.python.org/pypi/control/0.6.6
> http://sourceforge.net/projects/python-control/
>
> Nothing out of the box for your application, obviously. Also, the motor
> control itself will depend on the microprocessor hardware you are using and
> the motor controller. Assuming PWM, the raspberry pi has a software PWM
> module in Python. Same with micropython. Anything else is pretty much DIY.
>
> As for the overall concept of control systems, Chapter 9 of "Real World
> Instrumentation" ( http://shop.oreilly.com/product/9780596809577.do )
> will give you an overview of what is involved (with some python example,
> but not directly applicable to your system).
>
> Francois
> --
> raspberry-python.blogspot.com - www.pyptug.org - www.3DFutureTech.info
> <http://www.3dfuturetech.info/> - @f_dion
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] Python serial interface

2015-04-01 Thread Colin Ross
I am using the following controller:

http://www.aerotech.com/product-catalog/drives-and-drive-racks/ensemble-mp.aspx

Which does not specifically list python as one of the accepted languages,
but I guess this does not mean it is not possible.

Colin

On Wed, Apr 1, 2015 at 12:58 PM, Colin Ross 
wrote:

> Thank you Francois, this gives me a lot to think about!
>
> I really appreciate your feedback.
>
> Colin
>
> On Wed, Apr 1, 2015 at 12:50 PM, Francois Dion 
> wrote:
>
>> On Wed, Apr 1, 2015 at 11:01 AM, Colin Ross 
>> wrote:
>>
>>> Hi Francois,
>>>
>>> Thank you for the fast reply! I am looking to control a brushless servo
>>> motor (
>>> http://www.aerotech.com/product-catalog/motors/rotary-motors/bms-series.aspx)
>>> that drives a rotary stage.
>>>
>>
>> These motors are not controlled by serial, you'll need a brushless
>> controller. In turn the controller might be or not serial, or ip or
>> something else altogether (PWM is typical). They do have an rs-422
>> connection, but that is for a feedback signal. So you are building a
>> feedback control system. If you google that and python you'll find several
>> useful references, including a design and analysis module (but not control):
>>
>> https://pypi.python.org/pypi/control/0.6.6
>> http://sourceforge.net/projects/python-control/
>>
>> Nothing out of the box for your application, obviously. Also, the motor
>> control itself will depend on the microprocessor hardware you are using and
>> the motor controller. Assuming PWM, the raspberry pi has a software PWM
>> module in Python. Same with micropython. Anything else is pretty much DIY.
>>
>> As for the overall concept of control systems, Chapter 9 of "Real World
>> Instrumentation" ( http://shop.oreilly.com/product/9780596809577.do )
>> will give you an overview of what is involved (with some python example,
>> but not directly applicable to your system).
>>
>> Francois
>> --
>> raspberry-python.blogspot.com - www.pyptug.org - www.3DFutureTech.info
>> <http://www.3dfuturetech.info/> - @f_dion
>>
>
>
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor